Js闭包中变量理解

来源:互联网 发布:linux mint fcitx 编辑:程序博客网 时间:2024/06/18 06:41

先看一个例子

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个部分,闭包的活动变量,包含函数的活动变量,全局变量;

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

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

0 0