手机版

你必须知道的Javascript知识点;了解范围链介绍

时间:2021-11-21 来源:互联网 编辑:宝哥软件园 浏览:

示例代码:复制代码如下: var xxxVar1=1;var outer=function(){ var xxxVar2=2;var结果=[];for(var I=0;I 3;I){ var inner=function(){ var xxxVar3=3;返回xxxVar3 xxxVar2 xxxVar1 I;}结果。推动(内部);}返回结果;} var xxxVar1=100var xxxVar2=200var xxxVar3=300var结果=outer();结果[0](;结果[1]();结果[2]();实施结果

发生了什么事?可能很多人都知道上面例子的执行结果,但并不是所有人都知道为什么会这样,包括我自己。解释活动对象:当函数调用开始时,javascript解释器收集函数体中的所有局部变量(以var形式声明的变量),并将这些局部变量存储在一个名为“活动对象”的对象中,所有这些变量最初都是未定义的。示例复制代码代码如下: varfun=function(){ alert(name);Var name='段光伟';}执行此函数(fun())时,函数体尚未执行,当前活动对象为[{name : undefined}],因此执行fun()的结果为:

函数的[作用域]属性:每个函数在定义时(生成函数实例时)都会被赋予一个[作用域]属性,指向当前的“作用域链”。开发人员无法访问该属性,只有javascript可以访问它。作用域链:当一个函数被调用时,javascript引擎将为这个调用维护一个作用域链。该作用域链是函数的[作用域]加上调用函数时的活动对象所指向的作用域链,如[活动对象,定义函数时的作用域链]。复制代码示例如下: var a=1;//步骤1: [{a: 1,外部: undefined}]var outer=function(){//步骤3: [{b: undefined,内部3360 undefined },{a: 1,外部3360 function}] var b=2。var inner=function(){//step 5:[{ },{b: 2,inner3360 function},{a: 1,outer 3360 function}]返回a b;}//步骤4: [{b: 2,内部3360函数},{a: 1,外部3360函数}]返回inner();}//步骤2: [{a: 1,outer 3360 function }]outer();作用域链中的规则1 javascript一般在某些主机上运行,每个主机都会提供一个“全局对象”,或者说“全局活动对象”,它是所有作用域链的根节点。规则2“值操作”(例如alert(xxxVar))是沿着作用域链依次搜索名为“xxxVar”的变量,返回找到的第一个值,如果没有找到则抛出异常(引用错误:xxxxvar未定义)。规则3“赋值操作”(如xxxVar='段光伟')是沿着作用域链依次寻找名为“xxxVar”的变量,覆盖第一个找到的值,如果找不到,则在全局对象中添加“xxxVar”。注意:“闭包”的概念是通过“范围链”实现的,而C#是通过编译器实现的,不支持。NET。

版权声明:你必须知道的Javascript知识点;了解范围链介绍是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。