闭包陷阱

在书上看到了一个与闭包相关的错误: 

function func() {
    var arr = [], i;
    for(i=0; i<6; i++){
        arr[i] = function () {
            return i;  //Mutable variable is accessable from closure
        }
    }
    return arr;
}

var arr1 = func();

for(var j=0; j<arr1.length; j++){
    console.log("arr1[j]() is: " + arr1[j]());
}

当程序运行完 var arr1 = func();这行是,i的值为6 , 当我们再运行到console.log("arr1[j]() is: " + arr1[j]()); 这行时 再操作i ,i的值就为6了。

估计刚接触JS的同仁,或没有仔细理解这段代码的话会和程序运行结果产生歧义。 

猜你喜欢

转载自blog.csdn.net/liubangbo/article/details/86560619