您的位置:首页 > Web前端 > JavaScript

Js闭包中变量理解

2016-12-24 03:40 169 查看
先看一个例子

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


执行上面代码:

for (var i = 0; i  < 7; i++) {
console.log(fuc1()[i]());
fuc1()[i]() = null;
}


预想结果:是每个函数输出的结果一次是0-6;

实际结果:console.log()全是7;

这是因为在执行闭包函数的时候,每个闭包函数的作用域链中都保存着他的包含函数的活动对象,也就是for循环已经结束时的i值,结束的时候i = 7;

通过让闭包函数立即执行可以达到每个函数输出预想的结果。

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

for (var i = 0; i < 7; i++) {
console.log(funRightnow()[i]);
funRightnow()[i] = null;
}


*最后对于闭包的执行环境:包含3个部分,闭包的活动变量,包含函数的活动变量,全局变量;

闭包的包含函数在执行完毕以后,闭包的包含函数的执行环境的作用域链会被销毁,但是执行环境中的变量,依然在内存当中;

被销毁的是执行环境的作用域链,而作用域链是指向变量的引用;*

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息