精华内容
下载资源
问答
  • 公关礼仪是什么.doc

    2021-01-15 14:47:15
    是指公关人员在公共活动中应尊重他人,讲究礼节的程序.公关礼仅对于当今的公关人员来说,无疑是一种“通行证”。 众所周知,懂礼节的人进入社交场合,比不懂礼节的人显然要顺利得多.而且会受到欢迎,得到更多人的...
  • 心理学中,“强化” 生物受到外界环境中的某些刺激后,自觉或者不自觉调整应对策略,达到趋利避害。 举个例子。马戏团训练动物时(比方说猴子),训导员首先会发出某种指令(比方说抬一下手,表示希望猴子跳一下...

    什么是强化学习?

    强化学习的来源

    强化学习(Reinforcement Learning, RL),一般也称作增强学习,和心理学、动物行为的研究等领域有比较久的渊源。

    心理学中,“强化” 指生物受到外界环境中的某些刺激后,自觉或者不自觉调整应对策略,达到趋利避害

    举个例子。马戏团训练动物时(比方说猴子),训导员首先会发出某种指令(比方说抬一下手,表示希望猴子跳一下),动物接收到这个指令后,如果做出了正确的动作,会得到一定的奖励(比方说一根香蕉)。这样的过程重复很多次之后,猴子会学会一种策略,即训导员每抬一下手,我就跳一下,这样就可以吃到更多的香蕉;

    上面这个例子中,训练过程就是心理学里的“强化”现象,强化行为的刺激被称为强化物(“reinforceor”),猴子策略的改变过程也就是强化学习的过程;

    强化学习能做什么?

    考虑这个问题之前,我们不妨先回忆一下机器学习中另外两个大类:监督学习和无监督学习(以及它们的折中,半监督学习,或者叫弱监督学习)。

    • 监督学习

      指利用有标注的样本,通过训练一个模型或者设计一个算法,找到从样本特征样本标签之间的映射关系。一般用于解决感知问题,比如分类、检测、回归估计等;

      例如,人脸信息的感知,看到一张人脸的图片,判断人脸的性别(分类问题)、年龄(回归问题)等信息。

    • 无监督学习

      指利用没有标注的样本,来寻找数据隐含结构,可以用来解决的数据的度量问题,简化数据使之更容易理解,比如降维、聚类等;

      例如,通过聚类算法,可将大量的数据划分为少数的几个大类,属于同一类别的样本比较接近,这样可以简化后续的数据分析问题;再比如,通过降维算法,可以将高维数据表示为2维或3维数据,展示给人看,相比于看一串数字,可视化可以让人更直观、也容易得发现数据中的信息。

    • 半监督学习/弱监督学习
      由于现实生活中,大量的数据是没有标注的,人工标注数据成本也很高。因此,半监督学习,研究的是怎样 利用少量有标注的样本大量无标注的样本,实现监督学习的目的。或者说,少花钱,多办事。。。

    • 强化学习

      和上面集中领域不同,强化学习旨在解决决策问题,即某一场景下,我应采取什么样的策略,才能在未来获得最大的长期总收益。研究的是有目标导向的智能体,在环境中交互的完整的过程。
      再次用上面马戏团训练猴子举例子,猴子的训练过程即强化学习的过程:

      猴子----------------------被训练的智能体;
      训导员-------------------智能体(猴子)所处的环境;
      猴子的目标导向--------我要吃更多的香蕉;
      猴子和环境的交互------训导员你发指令,我做动作,你给(或不给)我香蕉;
      猴子的决策---------------训导员发指令后,我应该做什么样的动作,才能吃到香蕉;

      强化学习和监督学习很显著的差异:强化学习的过程,是智能体通过和环境的交互实现的,而环境对智能体的反馈,仅仅是对其动作的评价,而不是指导

      试错延迟收益是强化学习两个最显著的特征。

      例如,上面例子中,如果训导员以某种方式直接驱使其做出正确动作,训练过程可视作监督学习;然而,如果训导员并没有直接的告诉猴子,你的正确动作是什么,而是仅仅给予一个评价,对或者不对(给香蕉或者不给香蕉),而猴子通过不断试错,发现自己做某种动作后可以获得更多的香蕉,从而实现了训练过程,这个过程属于强化学习。

    强化学习关键词

    对于监督学习,关键词可以概括为 样本特征样本标签相关算法

    对于无监督学习,关键词可以概括为 样本特征相关算法

    而对于强化学习,研究的是完整的交互过程中的决策问题,具有动态的特点,需要用发展的眼光、长远得看待问题 →_→就像下象棋一样,对于某一个棋局,下一步应该怎样走,需要以最终赢棋为目的,相比而言,最近几步的得失反而没有那么重要。因此,强化学习领域中涉及的关键要素相对较多:

    • 状态 s: 当前环境的状态(state), 简写ss,比如 当前棋盘上每个棋子的位置;

    • 动作 a : 某种状态下,采取的动作(action), 简写aa,比如 拱卒 / 跳马 / 飞象 等等

    • 奖励 / 单步收益 r: 某种状态ss下,采取某种动作aa,获得单步奖励(reward), 简写rr;对于下棋,可以认为rr(赢棋)=1,rr(不赢棋)=0;

    • 回报 / 长期收益 G: 某种状态ss下,采取某种动作aa,在未来可以获得的所有奖励rr的总和;
      比如,从某一棋局开局,我的动作是跳马,最终我赢了,那么这一回合中从 (开局状态ss, 跳马动作aa)开始的长期收益(Gain),简写 GG 就是1,即 GG = 0(第1步谁都没赢) + 0(第2步谁都没赢) + 0(第3步谁都没赢) + … + 1(最后一步我赢了)。

    • 策略 π\pi 智能体在根据状态s,以一定概率选择动作a的过程,或者说选择动作a的概率;
      比如,对手当头炮(状态s),我就把马跳(动作a),写成条件概率就是π(as)=P(a=As=S)[0,1]\pi(a|s)=P(a=A_{我把马跳}|s=S_{对手当头炮})∈[0,1]。好的策略的目标是让长期收益G最大;

    • 价值函数 : 某种状态s下,或某种状态s并采取某种动作a后,在未来按照策略π\pi做动作,最终获得的所有奖励总和(即长期收益G的)的期望值 / 平均值;前者称为状态价值函数,记作vπ(s)v_{\pi}(s),后者称为动作价值函数,记作qπ(s,a)q_{\pi}(s, a)

      比如,从某一种棋局(状态ss)开局,每次开局都拱卒(动作aa),这样重复100次,并在未来永远按照策略π\pi做动作,最后赢棋有10局,那么动作价值函数qπ(s,a)=10100=0.1q_{\pi}(s, a)=\frac{10}{100}=0.1

    强化学习分类

    • 按任务
      • 分幕型(回合制) / 持续型(连续制)
      • 离散型(状态或空间)/ 连续型(状态或空间)
      • 其他
    • 按算法
      • 有模型 / 无模型
      • 回合更新 / 时序差分更新
      • 同策学习 / 异策学习
      • 基于价值 / 基于策略
      • 深度/ 非深度
      • 其他
    展开全文
  • Javascript的闭包是指一个函数与周围状态(词法环境)的引用捆绑在一起(封闭)的组合,在JavaScript中,每次创建函数时,都会同时创建闭包。闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面...

    Javascript的闭包是指一个函数与周围状态(词法环境)的引用捆绑在一起(封闭)的组合,在JavaScript中,每次创建函数时,都会同时创建闭包。闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰,即形成一个不销毁的栈环境。

    阅读本文前需要了解JS局部变量和全局变量。

    不清楚的可以看我的上篇文章:https://blog.csdn.net/qq_23853743/article/details/106946100

    1 计数器问题

    如果你想要统计一个数值,你需要定义一个变量counter,这时你可以使用全局变量。实现代码如下:

    var counter = 0;
    
    
    
    		
    
    
    
    function add() {
    
    
    
    	counter += 1;
    
    
    
    }
    
    
    
    		
    
    
    
    add();
    
    
    
    add();
    
    
    
    add();
    
    
    
    console.log(counter); // 计数器现在为 3
    

    上边的代码虽然可以实现计数, 但有一个大问题,那就是页面上的任何脚本都能改变计数器,这显然不是我们想要的,我们只想让特定的函数(例如:add)去改变counter ,所以我们要把counter变为局部变量,改变代码如下:

    function myCounter() {
    
    
    
    	var counter = 0;
    
    
    
    }
    
    
    
     
    
    
    
    function add() {
    
    
    
    	counter += 1;
    
    
    
    }
    
    
    
     
    
    
    
    add();//报错,不能访问局部变量 counter
    
    
    
    add();
    
    
    
    add();
    

    但是这样就不能实现计数功能了,因为counter 现在为局部变量,在函数add中不能访问。那么如何让add读取到局部变量?

    2 JS闭包

    要想让add读取到局部变量counter ,那就把add函数放到,myCounter函数里面,所以改变代码如下:

    function myCounter() {
    
    
    
    	var counter = 0;
    
    
    
    		   
    
    
    
    	function add() {
    
    
    
    		counter += 1;
    
    
    
    		console.log(counter);
    
    
    
    	}
    
    
    
        return add;
    
    
    
    }
    
    
    
     
    
    
    
    var myAdd = myCounter();
    
    
    
    myAdd();
    
    
    
    myAdd();
    
    
    
    myAdd();// 计数器现在为 3
    

    在上面的代码中,函数add被包括在函数myCounter内部,这时myCounter内部的局部变量counter ,对add是可见的。这是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。我们把add作为返回值,实现了在myCounter外部改变它的内部变量counter的值。

    在Java或一些其他编程语言中,一个函数中的局部变量仅存在于此函数的执行期间。也就是说一旦 myCounter() 执行完毕, counter 变量将不能再被访问。但是在 JavaScript 中显然不是这样的。**这是因为JavaScript中的函数会形成闭包。 闭包是由函数以及声明该函数的词法环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量。**在本例子中,myAdd是执行 myCounter时创建的 add()函数实例的引用。add的实例维持了一个对它的词法环境(变量 counter 存在于其中)的引用。因此,当 myAdd被调用时,变量 counter 仍然可用,此处的myAdd可以理解为Java中的一个对象引用,我们可以通过创建多个实例,创建多个计数器。代码如下:

    function myCounter() {
    
    
    
    	var counter = 0;
    
    
    
    		   
    
    
    
    	function add() {
    
    
    
    		counter += 1;
    
    
    
    		console.log(counter);
    
    
    
    	}
    
    
    
    	 return add;
    
    
    
    }
    
    
    
    		
    
    
    
    var myAdd1 = myCounter();
    
    
    
    myAdd1();
    
    
    
    myAdd1();
    
    
    
    myAdd1();// 计数器1现在为 3
    
    
    
    		
    
    
    
    var myAdd2 = myCounter();
    
    
    
    myAdd2();
    
    
    
    myAdd2();// 计数器2现在为 2
    

    这种在函数创建作用域之外执行函数的形式,叫做JS的闭包。

    3 闭包的用处

    闭包很有用,因为它允许将函数与其所操作的某些数据(环境)关联起来。这显然类似于面向对象编程。在面向对象编程中,对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联。

    在一些编程语言中,比如 Java,是支持将方法声明为私有的(private),即它们只能被同一个类中的其它方法所调用。而 JavaScript 没有这种原生支持,但我们可以使用闭包来模拟私有方法。私有方法不仅仅有利于限制对代码的访问:还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱了代码的公共接口部分。下面我们继续以上边的计时器为例,修改代码如下:

    var myCounter = function() {
    
    
    
    	var privateCounter = 0;
    
    
    
     
    
    
    
    	function changeBy(val) {
    
    
    
    		privateCounter += val;
    
    
    
    	}
    
    
    
     
    
    
    
    	return {
    
    
    
    		increment: function() {
    
    
    
    			changeBy(1);
    
    
    
    		},
    
    
    
    		decrement: function() {
    
    
    
    			changeBy(-1);
    
    
    
     
    
    
    
    		},
    
    
    
    		value: function() {
    
    
    
    			return privateCounter;
    
    
    
    		}
    
    
    
    	}
    
    
    
    };
    
    
    
     
    
    
    
    var Counter1 = myCounter();
    
    
    
    var Counter2 = myCounter();
    
    
    
    console.log(Counter1.value()); /* 计数器1现在为 0 */
    
    
    
    Counter1.increment();
    
    
    
    Counter1.increment();
    
    
    
    console.log(Counter1.value()); /* 计数器1现在为 2 */
    
    
    
    Counter1.decrement();
    
    
    
    console.log(Counter1.value()); /* 计数器1现在为 1 */
    
    
    
     
    
    
    
    console.log(Counter2.value()); /* 计数器2现在为 0 */
    
    
    
    Counter2.increment();
    
    
    
    console.log(Counter2.value()); /* 计数器2现在为 1 */
    

    我们创建了一个匿名函数含两个私有项:名为 privateCounter 的变量和名为 changeBy 的函数。这两项都无法在这个匿名函数外部直接访问。必须通过匿名函数返回的三个公共函数访问,Counter.increment,Counter.decrement 和 Counter.value,这三个公共函数共享同一个环境的闭包,多亏 JavaScript 的词法作用域,它们都可以访问 privateCounter 变量和 changeBy 函数。我们把匿名函数储存在一个变量myCounter 中,并用它来创建多个计数器,每次创建都会同时创建闭包,因为每个闭包都有它自己的词法环境,每个闭包都是引用自己词法作用域内的变量 privateCounter ,所以两个计数器 Counter1 和 Counter2 是各自独立的。

    以这种方式使用闭包,提供了许多与面向对象编程相关的好处 —— 特别是数据隐藏和封装

    4 闭包导致的一些问题

    在 ECMAScript 2015 引入let 关键字之前,在循环中有一个常见的闭包创建问题。请看以下代码:

    <!DOCTYPE html>
    
    
    
    <html>
    
    
    
    	<head>
    
    
    
    		<meta charset="utf-8">
    
    
    
    		<title></title>
    
    
    
    	</head>
    
    
    
    	<body>
    
    
    
    		<p id="help">提示信息</p>
    
    
    
    		<p>E-mail: <input type="text" id="email" name="email"></p>
    
    
    
    		<p>Name: <input type="text" id="name" name="name"></p>
    
    
    
    		<p>Age: <input type="text" id="age" name="age"></p>
    
    
    
     
    
    
    
    	</body>
    
    
    
    	<script>
    
    
    
    		function showHelp(help) {
    
    
    
    			document.getElementById('help').innerHTML = help;
    
    
    
    		}
    
    
    
     
    
    
    
    		function setupHelp() {
    
    
    
    			var helpText = [{
    
    
    
    					'id': 'email',
    
    
    
    					'help': '你的邮件地址'
    
    
    
    				},
    
    
    
    				{
    
    
    
    					'id': 'name',
    
    
    
    					'help': '你的名字'
    
    
    
    				},
    
    
    
    				{
    
    
    
    					'id': 'age',
    
    
    
    					'help': '你的年龄'
    
    
    
    				}
    
    
    
    			];
    
    
    
     
    
    
    
    			for (var i = 0; i < helpText.length; i++) {
    
    
    
    				var item = helpText[i];
    
    
    
    				document.getElementById(item.id).onfocus = function() {
    
    
    
    					showHelp(item.help);
    
    
    
    				}
    
    
    
    			}
    
    
    
    		}
    
    
    
    		setupHelp();
    
    
    
    	</script>
    
    
    
    </html>
    

    数组 helpText 中定义了三个提示信息,每一个都关联于对应的文档中的input 的 ID。通过循环依次为相应input添加了一个 onfocus 事件处理函数,以便显示帮助信息。运行这段代码后,您会发现它没有达到想要的效果。无论焦点在哪个input上,显示的都是关于年龄的信息。

    **演示地址:**https://www.albertyy.com/2020/7/closure1.html

    **我们想要的正确效果:**https://www.albertyy.com/2020/7/closure2.html

    这是因为赋值给 onfocus 的是闭包。这些闭包是由他们的函数定义和在 setupHelp 作用域中捕获的环境所组成的。这三个闭包在循环中被创建,但他们共享了同一个词法作用域,在这个作用域中存在一个变量item。这里因为变量item使用var进行声明,由于变量提升(item可以在函数setupHelp的任何地方使用),所以item具有函数作用域。当onfocus的回调执行时,item.help的值被决定。由于循环在onfocus 事件触发之前早已执行完毕,变量对象item(被三个闭包所共享)已经指向了helpText的最后一项。要解决解决这个问题,有以下几个方法。

    4.1 第一:使用更多的闭包

    function showHelp(help) {
    
    
    
    	document.getElementById('help').innerHTML = help;
    
    
    
    }
    
    
    
     
    
    
    
    function makeHelpCallback(help) {
    
    
    
    	return function() {
    
    
    
    		showHelp(help);
    
    
    
    	};
    
    
    
    }
    
    
    
     
    
    
    
    function setupHelp() {
    
    
    
    	var helpText = [{
    
    
    
    			'id': 'email',
    
    
    
    			'help': '你的邮件地址'
    
    
    
    		},
    
    
    
    		{
    
    
    
    			'id': 'name',
    
    
    
    			'help': '你的名字'
    
    
    
    		},
    
    
    
    		{
    
    
    
    			'id': 'age',
    
    
    
    			'help': '你的年龄'
    
    
    
    		}
    
    
    
    	];
    
    
    
     
    
    
    
    	for (var i = 0; i < helpText.length; i++) {
    
    
    
    		var item = helpText[i];
    
    
    
    		document.getElementById(item.id).onfocus = makeHelpCallback(item.help);
    
    
    
    	}
    
    
    
    }
    
    
    
    setupHelp();
    

    这段代码可以正常的执行了。这是因为所有的回调不再共享同一个环境, makeHelpCallback 函数为每一个回调创建一个新的词法环境。在这些环境中,help 指向 helpText 数组中对应的字符串。

    4.2 第二种方法:使用了匿名闭包

    function showHelp(help) {
    
    
    
    	document.getElementById('help').innerHTML = help;
    
    
    
    }
    
    
    
     
    
    
    
    function setupHelp() {
    
    
    
    	var helpText = [{
    
    
    
    			'id': 'email',
    
    
    
    			'help': '你的邮件地址'
    
    
    
    		},
    
    
    
    		{
    
    
    
    			'id': 'name',
    
    
    
    			'help': '你的名字'
    
    
    
    		},
    
    
    
    		{
    
    
    
    			'id': 'age',
    
    
    
    			'help': '你的年龄'
    
    
    
    		}
    
    
    
    	];
    
    
    
     
    
    
    
    	for (var i = 0; i < helpText.length; i++) {
    
    
    
    		(function() {
    
    
    
    			var item = helpText[i];
    
    
    
    			document.getElementById(item.id).onfocus = function() {
    
    
    
    				showHelp(item.help);
    
    
    
    			}
    
    
    
    		})(); // 马上把当前循环项的item与事件回调相关联起来
    
    
    
    	}
    
    
    
    }
    
    
    
    setupHelp();
    

    4.3 第三种方法:使用用ES2015引入的let关键词

    function showHelp(help) {
    
    
    
    	document.getElementById('help').innerHTML = help;
    
    
    
    }
    
    
    
     
    
    
    
    function setupHelp() {
    
    
    
    	var helpText = [{
    
    
    
    			'id': 'email',
    
    
    
    			'help': '你的邮件地址'
    
    
    
    		},
    
    
    
    		{
    
    
    
    			'id': 'name',
    
    
    
    			'help': '你的名字'
    
    
    
    		},
    
    
    
    		{
    
    
    
    			'id': 'age',
    
    
    
    			'help': '你的年龄'
    
    
    
    		}
    
    
    
    	];
    
    
    
     
    
    
    
    	for (var i = 0; i < helpText.length; i++) {
    
    
    
    		let item = helpText[i]; //使用let代替var
    
    
    
    		document.getElementById(item.id).onfocus = function() {
    
    
    
    			showHelp(item.help);
    
    
    
    		}
    
    
    
    	}
    
    
    
    }
    
    
    
    setupHelp();
    

    这个里使用let而不是var,因为let是具有块作用域的变量,即它所声明的变量只在所在的代码块({})内有效,因此每个闭包都绑定了块作用域的变量,这意味着不再需要额外的闭包。

    4.4 第四种方法:使用 forEach()来遍历

    function showHelp(help) {
    
    
    
    	document.getElementById('help').innerHTML = help;
    
    
    
    }
    
    
    
     
    
    
    
    function setupHelp() {
    
    
    
    	var helpText = [{
    
    
    
    			'id': 'email',
    
    
    
    			'help': '你的邮件地址'
    
    
    
    		},
    
    
    
    		{
    
    
    
    			'id': 'name',
    
    
    
    			'help': '你的名字'
    
    
    
    		},
    
    
    
    		{
    
    
    
    			'id': 'age',
    
    
    
    			'help': '你的年龄'
    
    
    
    		}
    
    
    
    	];
    
    
    
     
    
    
    
    	helpText.forEach(function(text) {
    
    
    
    		document.getElementById(text.id).onfocus = function() {
    
    
    
    			showHelp(text.help);
    
    
    
    		}
    
    
    
    	});
    
    
    
    }
    
    
    
    setupHelp();
    

    5 性能

    由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。如果不是某些特定任务需要使用闭包,最好不要使用闭包。

    例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。原因是这将导致每次构造器被调用时,方法都会被重新赋值一次(也就是说,对于每个对象的创建,方法都会被重新赋值)。

    请看以下代码:

    function MyObject(name, message) {
    
    
    
    	this.name = name.toString();
    
    
    
    	this.message = message.toString();
    
    
    
     
    
    
    
    	this.getName = function() {
    
    
    
    		return this.name;
    
    
    
    	};
    
    
    
     
    
    
    
    	this.getMessage = function() {
    
    
    
    		return this.message;
    
    
    
    	};
    
    
    
    }
    

    在上面的代码中,我们并没有利用到闭包的好处,因此可以避免使用闭包。修改如下:

    function MyObject(name, message) {
    
    
    
    	this.name = name.toString();
    
    
    
    	this.message = message.toString();
    
    
    
    }
    
    
    
    MyObject.prototype = {
    
    
    
    	getName: function() {
    
    
    
    		return this.name;
    
    
    
    	},
    
    
    
    	getMessage: function() {
    
    
    
    		return this.message;
    
    
    
    	}
    
    
    
    };
    

    但我们一般不应该重新定义原型,所以可修改如下:

    function MyObject(name, message) {
    
    
    
    	this.name = name.toString();
    
    
    
    	this.message = message.toString();
    
    
    
    }
    
    
    
     
    
    
    
    MyObject.prototype.getName = function() {
    
    
    
    	return this.name;
    
    
    
    };
    
    }
    
    
    
    setupHelp();
    

    5 性能

    由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。如果不是某些特定任务需要使用闭包,最好不要使用闭包。

    例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。原因是这将导致每次构造器被调用时,方法都会被重新赋值一次(也就是说,对于每个对象的创建,方法都会被重新赋值)。

    请看以下代码:

    function MyObject(name, message) {
    
    
    
    	this.name = name.toString();
    
    
    
    	this.message = message.toString();
    
    
    
     
    
    
    
    	this.getName = function() {
    
    
    
    		return this.name;
    
    
    
    	};
    
    
    
     
    
    
    
    	this.getMessage = function() {
    
    
    
    		return this.message;
    
    
    
    	};
    
    
    
    }
    

    在上面的代码中,我们并没有利用到闭包的好处,因此可以避免使用闭包。修改如下:

    function MyObject(name, message) {
    
    
    
    	this.name = name.toString();
    
    
    
    	this.message = message.toString();
    
    
    
    }
    
    
    
    MyObject.prototype = {
    
    
    
    	getName: function() {
    
    
    
    		return this.name;
    
    
    
    	},
    
    
    
    	getMessage: function() {
    
    
    
    		return this.message;
    
    
    
    	}
    
    
    
    };
    

    但我们一般不应该重新定义原型,所以可修改如下:

    function MyObject(name, message) {
    
    
    
    	this.name = name.toString();
    
    
    
    	this.message = message.toString();
    
    
    
    }
    
    
    
     
    
    
    
    MyObject.prototype.getName = function() {
    
    
    
    	return this.name;
    
    
    
    };
    
    展开全文
  • 耳鸣是指人们在没有任何外界刺激条件下所产生的异常声音感觉。如感觉耳内有蝉鸣声、嗡嗡声、嘶嘶声等单调或混杂的响声,实际上周围环境中并无相应的声音,也就是说耳鸣只是一种主观感觉。耳鸣可以短暂或持续性存在....
    耳鸣是指人们在没有任何外界刺激条件下所产生的异常声音感觉。如感觉耳内有蝉鸣声、嗡嗡声、嘶嘶声等单调或混杂的响声,实际上周围环境中并无相应的声音,也就是说耳鸣只是一种主观感觉。耳鸣可以短暂或持续性存在.严重的耳鸣可以扰得人一刻不得安宁,令人十分紧张。如果是短暂性忽来忽去的耳鸣,一般是生理现象,不必过分紧张,可听之任之。如果是持续性耳鸣,尤其是伴有耳聋、眩晕、头痛等其他症状,则要提高警惕,尽早就医。细查耳鸣病因

    根据病人的主诉.医生很容易判断病人是否有耳鸣,但是对耳鸣的病因诊断则需要借助一系列检查,包括耳鼻咽喉科的常规检查、听力学检查、耳鸣测试等,有时甚至要做一些必要的神经科、全身性疾病的检查。因此,病人应该去正规的大医院找专业医生诊断,只有查明了耳呜的性质、特点、可能的病变部位,才能针对性地确定治疗方案。

    耳鸣的病因比较复杂,一般可分为两大类:①耳源性疾病(即与耳部疾病相关).往往伴有听力下降,如由耳毒性药物中毒、病毒感染、内耳供血不足等引起。②非耳源性疾病,这类病人除了有耳鸣外,常伴有相应疾病的其他症状,如心血管疾病、高血压病、糖尿病、脑外伤等。

    耳鸣和其他疾病一样,早期诊治有助于病情好转和康复。因为耳鸣常先于其他症状之前,这无疑是一种“警报”,如氨基糖甙类抗生素的耳毒性往往先出现耳鸣,继而听力减退,当发生耳鸣时应立即停药;贫血、高血压的病人出现耳鸣或耳鸣加重,表明病情在进一步恶化,应引起警惕;长期在噪音环境下工作者,出现耳鸣,则应考虑调换工作环境。有些耳鸣早期明确病因,如盯聍栓塞、分泌性中耳炎等,即可采取相应治疗措施,耳鸣也会随之消失。但约有40%病人的耳鸣找不到明显的病因.医生称为不明原因性耳鸣。治疗因人而异

    耳鸣病人经过医生的系统检查,明确了病情,就应该采取针对性治疗措施。那么,哪些耳鸣需要治疗呢?①由外科病变(如蜗后病变、血管畸形等)引起的耳鸣,必须尽早接受外科手术治疗。②由其他疾病(如高血压、颈椎病、分泌性中耳炎、梅尼埃病等)引起,治疗应以控制这些疾病为原则。③对耳鸣已严重困扰了正常工作、生活或睡眠的病人.应该充分了解治疗的长期性和艰难性,并积极配合医生进行治疗,正确理解治疗效果。④有些病人耳鸣史较长,开始感觉耳鸣较强,随着时间的推移,自感已经适应且耳鸣程度并未加重.也不影响工作、生活和睡眠,经过医生详尽的检查.也未发现任何疾病.可不采取治疗措施,但需要定期复诊。⑤耳鸣伴听力减退的病人,佩戴助听器为首选方案。

    目前,治疗耳鸣的方法原则上分为两大类:保守治疗和手术治疗。除发现有外科病变,必须进行手术治疗外,一般都采取保守治疗如心理治疗、掩蔽、药物、松弛疗法等。几点注意事项

    由于耳鸣受多种因素的影响,病人在治疗耳呜中还应注意以下事项:

    1 要有乐观豁达的生活态度。一旦有耳鸣,不要过度紧张,应及时接受医生的诊治。在诊治过程中,听从医生指导,积极配合治疗.并且可积极主动地发挥其他优势(如业余爱好和热爱本职工作等)来分散自己对耳鸣的关注,调整自己的生活节奏,多培养一些兴趣点。

    2 避免在强噪声环境下长时间逗留或过多地接触噪声.避免或谨慎地使用耳毒性药物,少吸烟、少饮酒、生活作息有规律,睡眠不宜过长(中青年7—8小时,老年人6小时睡眠即可)。

    3 由于耳鸣起因较慢、病程都非短期内发生,故治疗一般也需要较长时间,如耳鸣掩蔽疗法、松弛疗法等至少要完成为期一个月的疗程,才能评估治疗效果。因此,病人在配合治疗过程中要有恒心,不要轻易放弃。

    转载于:https://www.cnblogs.com/wangdiaole/archive/2009/04/30/1446990.html

    展开全文
  • 我们知道可靠性测试是要求产品在设计、应用过程中,不断经受自身及外界气候环境及机械环境的影响,而仍能够正常工作,这就需要在使用环境中...一、什么是气候环境类可靠性测试气候环境可靠性测试是指为整机、电工电...

    我们知道可靠性测试是要求产品在设计、应用过程中,不断经受自身及外界气候环境及机械环境的影响,而仍能够正常工作,这就需要在使用环境中试验产品设备并不断对其验证。而其中的使用环境大概分为两大类,一类是气候环境,第二类是机械环境。

    363421eeeb3e4a390ffcf1eab9955a02.png

    现在为大家介绍下什么是气候环境类可靠性测试,这其中包含什么测试内容?其对应的测试标准又是什么?让我们一起探讨。

    一、什么是气候环境类可靠性测试

    气候环境可靠性测试是指为整机、电工电子元器件或材料提供的一种人工模拟气候环境条件或加速试验条件,目的在于暴露产品在使用环境中可能产生的质量问题,评估该气候环境对产品的预期影响,并针对问题进行改善以提高产品的环境适应性能力。

    二、气候环境类可靠性测试项目及主要对应标准

    942ea6ec3f43c03b7fdadebb8064ec0b.png

    三、气候环境类可靠性测试应用范围

    电子产品,电器,汽车零部件,移动通信,PCB/PCBA,橡胶/塑料,镀层/涂层,包装材料,LED,金属材料及零部件等范围。

    四、环境可靠性测试设备

    Delta德尔塔仪器专注于环境模拟可靠性检测设备的研发设计、制造销售!环境可靠性检测设备广泛应用于从原材料、元器件级别,到电路板/模块级别,到整机电子、电器、电力等产品进行恒定温度,恒定湿度,变化温度,变化温湿度,盐雾试验,混合气体试验,臭氧老化试验,UV紫外线加速老化试验,氙灯老化试验,二氧化硫腐蚀试验,高空低气压试验,IPX1~8防水等级试验,防尘/砂尘试验,跌落试验,燃烧试验,半正弦波/梯形波加速度冲击试验,正弦/随机振动试验,碰撞模拟试验,跌落试验,拉伸强度试验,疲劳试验,地震试验,高加速寿命老化及应力筛选等机械、力学环境试验,气候环境试验和综合环境试验项目。我们的产品包括:GB4208及IEC61032整套测试手指/各种试验指/测试探棒|弹簧冲击锤|防尘试验箱(砂尘试验箱)|垂直滴水试验装置|淋雨试验箱(垂直滴水&摆管淋雨二合一)|防浸水试验装置|淋雨试验箱IPX34|摆管淋雨试验装置|智能型手执式喷淋试验装置|砂尘试验箱|IPX9高温高压喷水试验箱|手执式淋雨试验装置|防冲水试验装置|UL防喷水试验装置|防水试验供水系统等,并能够承接客户需要的防水等级实验室IPX1-X9全套淋雨试验室的基建、试验室装修布置、设备供应安装的交钥匙工程。

    展开全文
  • 什么叫容灾

    2017-01-21 17:17:47
    容灾技术系统的高可用性技术的一个组成部分,容灾系统更加强调处理外界环境对系统的影响,特别灾难性事件对整个IT节点的影响,提供节点级别的系统恢复功能。 从其对系统的保护程度来分,可...
  • 2.对外界完全隔离的工作环境,不怕灰尘、水汽和油污;3.可以用任何物体来触摸;4.缺点因为复合薄膜的外层采用塑胶材料,不知道的人太用力或使用锐器触摸可能划伤整个触摸屏而导致报废,单点触控。电容式触摸屏1....
  • 所谓热敏特性是指外界环境温度升高时,半导体的导电性能也随着温度的升高而增强。所谓掺杂特性是指在纯净的半导体中,如果掺入极微量的杂质可使其导电性能剧增。 3、什么是P型半导体? 答:根据半导体的掺杂特性,在...
  • 强化学习概念理解

    千次阅读 2019-03-18 22:41:44
    一、基本理解 强化学习智能体(Agent)以“试错”的 方式进行学习,...在强化学习中,算法来把外界环境转化为最大化奖励量的方式的动作,算法并没有 直接告诉Agent(行为主体)要做什么或者要采取哪个动作,而是Agent...
  • 是指不同的个体在相同的条件下,对外界环境因素的反应不同总体Population:根据研究目的所确定的同质观察单位的全体;个体Individual:是构成总体的最基本观察单位;根据随机化原则有总体中随机抽取部分个体...
  • 接着智能窗-学习笔记(一)继续...环境敏感的水凝胶:是指自身能够感知外界环境(如温度,PH,光,电,压力等)微小的变化或刺激,并能产生相应的物理结构和化学性质变化甚至突变的一类高分子凝胶。 此类凝胶的突出特
  • 这个部署配置清单是指,我们部署到服务器之后,还要对哪些配置进行修改 1、为什么部署之后要针对【】配置 开发环境: 一般是本地电脑 为开发服务,一般不会接触到外界 生产环境: 服务器 提供web服务,面临...
  • JAVA多态理解

    2021-02-08 21:27:57
    比如:水在通常情况下液态,但在外界环境变化时可能会固态冰或者气态水蒸气。 Java中多态三个步鄹 1.要有继承关系 2.要有方法重写 3.要有父类应用指向子类对象 代码案例:动物类 1.生成一个动物类,成员变量只有...
  • 1 什么是容灾 ... 容灾即使系统的高可用性技术的一个组成部分,荣在系统更加强调处理外界环境对系统的影响,特别灾难性事件对整个IT节点的影响,提供节点级别的系统恢复功能。   2 容灾综述   2.
  • 是指电气设备在电磁环境中良好的工作能力,并且不能产生在此环境中工作的其它设备所不能接受的电磁干扰。  国际电工委员会(IEC)对电磁兼容性的定义是:“电磁兼容性是电子设备的一种功能,电子设备在电磁环境
  •  容灾即使系统的高可用性技术的一个组成部分,荣在系统更加强调处理外界环境对系统的影响,特别灾难性事件对整个IT节点的影响,提供节点级别的系统恢复功能。   2 容灾综述   2...
  • 半导体基础(二)

    千次阅读 2006-04-22 20:16:00
    1、什么叫半导体? 答:半导体顾名思义,就是指它的导电能力介于导体和绝缘体之间的物质 。常用的半导体材料有硅(Si)和锗(Ge)等。 2、半导体主要有哪些特性? 答:半导体主要有三...所谓热敏特性是指外界环境温度
  • 是指电气设备在电磁环境中良好的工作能力,并且不能产生在此环境中工作的其它设备所不能接受的电磁干扰。  国际电工委员会(IEC)对电磁兼容性的定义是:“电磁兼容性是电子设备的一种功能,电子设备在电磁
  • 保护计算机设备、设施免遭自然灾害(地震、水灾、火灾、有害气体等)、人为破坏及其他环境事故破坏的措施和过程 环境安全: 对系统所在环境的安全保护。应具备消防报警、安全照明、不间断供电、温湿度控制系统和...
  • 我们常说的锁,一般给资源加锁,向外界表明资源正在被某个线程占用,其它企图获得这个资源的线程检测到目标资源被锁住了,就会轮询等待直到锁被占有者释放,或者等待一定时间后放弃资源去做其它事情。...
  • 一、什么是幂等性 幂等(idempotence),这个词来源于数学中的一个概念,例如:幂等函数/幂等方法(用相同的参数重复执行,并能获得相同结果的函数)。那这个概念对应到系统中,不管一次操作,还是多次操作,...
  • 但在这里局域网并非传统概念上的局域网、城域网、广域网中的局域网,而是属于一个组织的所有资产所构成的网络以及其与外界通信信道的集合。 态势感知        态势感知的概念这几年都很火,听了很多...
  • 表达能力主要是指“写”和“说”的能力。“写”和“说”是人们向外界表达自己才华的重要途径。表达能力低下是中国软件开发人员的通病,值得业界高度重视。 很多软件开发人员怕写文档和报告,讲述问题和想法时...
  • 其中,安全状态是指智能卡在当前所处的一种状态,这种状态是在智能卡进行完复位应答或者是在它处理完某命令之后得到的。事实上,我们完全可以认为智能卡在整个工作过程中始终都是处在这样或是那样的一种状态之中,...
  • 软件工程知识点

    2012-12-02 21:34:25
    需求有效性验证是指对已经产生的需求结论所要进行的检查与评价。一般需要对需求文档草稿从有效性、一致性、完整性、现实性、可检验性等几个方面进行有效性验证。比较常用的需求有效性验证方法与工具包括:需求评审、...
  • JAVA核心技术

    2006-02-23 15:31:04
    Alexander给出的经典定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。??模式有不同的...
  • 环境(并不一定最友好的,但一定最强大的),我建议你一定要好好的熟悉一下 Linux。 三.如何得到Linux? 据我所知,大多数的 Linux 发行版本(Linux distribution)和核心(Kernel)都可以 从网上下载...
  • 保密性是指保证数据只能够被得到授权的人访问,而不允许被其他人访问。完整性是指确认数据完好并且没有被损坏。有效性是指当需要访问数据时,就能够正常地访问。这三个原则指导着计算机安全领域中的讨论,并为本书...
  • 频率计的基本原理用一个频率稳定度高的频率源作为基准时钟,对比测 量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称 闸门时间为1 秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

外界环境是指什么