闭包中的变量

2016-12-04  本文已影响17人  saronic

先看一段代码

function out(){
    var arr = {};
    for(var i = 0; i < 3; i++) {
        arr[i] = function() {
            return i;
        }
    }
    return arr;
}

var f = out();
console.log(f[0]());

最终运行结果:3
arr是一个数组,里面的每个元素都是一个函数。f=out(),其实 f 等于 返回的 arr, f[0] 就等于 arr[0], 可以 console.log(f[0].toString()); 打印 f[0] 的定义。打印结果如下:

function () {
    return i;
}

执行 f0 的时候,return i,这个 i 应该是多少呢,这就是闭包引用函数外边的值,这里注意,闭包里的 i 里面保存的是外面 i 的一个引用(参考:David Herman 的《Effective JavaScript》第 11 条)。这是外面的 i 的值是多少呢? 因为 i 是 var 声明的,整个 function 内有效,每次 for 循环, i 都加 1, 所以最后结果是 3.

上一篇下一篇

猜你喜欢

热点阅读