闭包

闭包:在一个函数内部,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 出来的函数,会使用上级函数中的变量。
  • 作用:维持一个独立的作用域。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容