闭包

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

推荐阅读更多精彩内容

  • 问题 一、什么是闭包? 有什么作用? 闭包闭包就是能够读取其他函数内部变量的函数。在javascript中,只有函...
    婷楼沐熙阅读 3,677评论 0 0
  • JS 函数 函数分为两类具名函数、匿名函数,其变型可以包括自执行函数、递归函数 具名函数含有名字的函数functi...
    月光在心中阅读 4,535评论 0 10
  • 什么是闭包? 有什么作用闭包:函数对象可以通过作用域链相互关联,函数体内部的变量可以保存在函数的作用域内。 上述代...
    coolheadedY阅读 4,032评论 0 0
  • 前言 总括 :这篇文章使用有效的javascript代码向程序员们解释了闭包,大牛和功能型程序员请自行忽略。 译者...
    KX九五阅读 1,950评论 0 1
  • 问答 什么是闭包? 有什么作用答:“官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一...
    饥人谷_桶饭阅读 1,553评论 0 0