AJax技术

学习javascript闭包

字号+ 作者:H5之家 来源:H5之家 2017-09-18 13:11 我要评论( )

闭包:是指有权访问另一个函数作用域变量的函数。创建闭包的常见方式就是在一个函数内创建另一个函数。理解如何创建作用域链以及作用域链的用途对于理解闭包非常

闭包:是指有权访问另一个函数作用域变量的函数。

创建闭包的常见方式就是在一个函数内创建另一个函数。

理解如何创建作用域链以及作用域链的用途对于理解闭包非常重要。作用域链本质上是一个指向变量对象的指针列表,它只引用但不实际包含变量对象。无论在任何时候在函数中访问一个变量时,就会从作用域链中搜索相应名字的变量。

当某个函数被调用时,会创建一个执行环境(execution context)及相应的作用域链。然后使用arguments和其他命名参数来初始化活动对象(activation object)。但在作用域链中,外部函数的活动对象始终处于第二位,外部函数的外部函数的活动对象处于第三位……直至作用域终点的全局作用域。

一般来讲,当函数执行完毕后,局部活动对象会被销毁,内存中仅保存全局作用域(全局执行环境的变量对象),但是闭包的情况又有不同。

作用域链的这种配置机制引出了一个值得注意的副作用,即:闭包只能取得包含函数中任何变量的最后一个值。闭包保存的是整个变量对象而不是某个特殊的变量。
观察下面代码:

function createFunctions(){ var result=new Array(); for( var i=0;i<10;i++){ result[i]=function(){ return i; }; } for(var i=0;i<result.length;i++){ console.log(result[i]); } } createFunctions();

结果:

学习javascript闭包

unction createFunctions(){ var result=new Array(); for( var i=0;i<10;i++){ result[i]=function(num){ return num; }(i); } for(var i=0;i<result.length;i++){ console.log(result[i]); } } createFunctions();

结果为:

学习javascript闭包

function createFunctions(){ var result=new Array(); for( var i=0;i<10;i++){ result[i]=function(){ return i; }; } for(var i=0;i<result.length;i++){ console.log(result[i]); } } createFunctions();

结果同上。

闭包中使用this对象:
我们知道在闭包中,this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this指向window,而当函数被当作某个对象的方法调用时,this指向那个对象。不过,匿名函数的执行对象具有全局性,因此其this对象通常指向window,不过,通常由于编写闭包的方式不同,这一点可能不会那么明显。
如:

 var name = "The Window";   var object = {     name : "My Object",     getNameFunc : function(){       return function(){         return this.name;       };     }   };   alert(object.getNameFunc()());

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 李炎恢教程/妙味课堂javaScript/jQuery/js/Ajax全套视频

    李炎恢教程/妙味课堂javaScript/jQuery/js/Ajax全套视频

    2017-09-16 13:00

  • ztree点击文字勾选checkbox,radio实现方法

    ztree点击文字勾选checkbox,radio实现方法

    2017-09-10 15:01

  • Ajax实现--javascript

    Ajax实现--javascript

    2017-09-06 11:03

  • AJAX教程上手篇

    AJAX教程上手篇

    2017-09-06 11:03

网友点评
s