闭包

2016-12-21  本文已影响9人  Hunter_Gu

闭包:在一个函数内部,return 出另外一个函数,并且该函数访问了上级函数作用域中的变量。
缺点:内存泄漏(被访问的变量的内存永远无法被销毁)。

    (function(){
        var count = [];
        for(var i = 0;i < 10;i ++){
            count[i] = function(){
                return i;
            }
        }
        console.log(count[0]());
    })();//结果为输出:10

上述的原因为:

    count[i] = function(){
        return i;
    }

只是一个表达式:把该函数赋值给count[i]。所以count[0] = count[1] = ... = count[9] = function(){return i;},当调用时, i 已经为 10。

    (function(){
        var count = [];
        for(var i = 0;i < 10;i ++){
            count[i] = (function(num){
                return function(){
                    return num;
                }
            })(i);
        }
        console.log(count[0]());
    })();

或者

    (function(){
        var count = [];
        for(var i = 0;i < 10;i ++){
            count[i] = (function(){
                var num = i;
                return function(){
                    return num;
                }
            })();
        }
        console.log(count[0]());
    })();
上一篇下一篇

猜你喜欢

热点阅读