最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JS中闭包的含义

来源:动视网 责编:小采 时间:2020-11-27 20:13:17
文档

JS中闭包的含义

JS中闭包的含义:闭包(Closure)闭包是指有权访问另一个函数作用域中的变量的函数。如何创建闭包最常见的就是在一个函数内部创建另外一个函数。以TrialFunction()函数为例:function TrialFunction(property) { return function(a, b) { var a1
推荐度:
导读JS中闭包的含义:闭包(Closure)闭包是指有权访问另一个函数作用域中的变量的函数。如何创建闭包最常见的就是在一个函数内部创建另外一个函数。以TrialFunction()函数为例:function TrialFunction(property) { return function(a, b) { var a1


闭包(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中闭包的含义

JS中闭包的含义:闭包(Closure)闭包是指有权访问另一个函数作用域中的变量的函数。如何创建闭包最常见的就是在一个函数内部创建另外一个函数。以TrialFunction()函数为例:function TrialFunction(property) { return function(a, b) { var a1
推荐度:
标签: 里面 js 意义
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top