欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

JS中闭包的含义

程序员文章站 2022-04-26 12:33:41
...


闭包(Closure)

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

如何创建闭包

最常见的就是在一个函数内部创建另外一个函数。以TrialFunction()函数为例:

function TrialFunction(property) {

      return function(a, b) {
           var a1 = a[property];           var b1 = b[property];           if (a1 < b1) {                return -1;
           } else if (a1 > b1) {                return 1;
           } else {                return 0;
           }
      };
}

上述代码中,内部函数访问了外部函数中的变量property。即使这个内部函数被返回了,而且在其他地方被调用了,它人仍然可以访问property变量。

这种情况是因为,这个内部函数的作用域链包含了TrialFunction的作用域。

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

在函数执行过程中,为读取和写入变量的值,就需要在作用域链中查找变量。

作用域链的这种机制导致了一个副作用,那就是闭包只能取得包含函数中任何变量的最后一个值。
例如:

function example() {
   var result = new Array();  
   for (var i = 0; i < 10; i++) 
   {
      result[i] = function() 
      {
         return i;
      }
   }   return result;
}

这个函数会返回一个数组,一般大家会认为,每个函数都应该返回自己的index,即[0, 1, 2, ……9];但是实际上每个函数都返回的是10。

以上就是JS中闭包的含义的详细内容,更多请关注其它相关文章!

相关标签: javascript 含义