闭包

作者: Hunter_Gu | 来源:发表于2016-12-21 23:45 被阅读9次

    闭包:在一个函数内部,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]());
        })();
    
    • 特点:
      1.函数中 return 出另一个函数。
      2.return 出来的函数,会使用上级函数中的变量。
    • 作用:维持一个独立的作用域。

    相关文章

      网友评论

          本文标题:闭包

          本文链接:https://www.haomeiwen.com/subject/ihdcvttx.html