Js中 闭包小总结

什么是闭包?

闭包就是有权访问另一个函数作用域中的变量的函数

怎么创建闭包?

在一个函数内部创建另一个函数,内部函数会将外部函数的活动对象添加到它的作用域链中。当外部函数返回后,其执行环境的作用域链会被销毁,但它的活动对象不会被销毁,直到内部函数被销毁后,外部函数的活动对象才会被销毁
闭包的作用

一个是读取函数内部的变量,另一个是让这些变量的值始终保持在内存中。

有什么副作用?

闭包只能取得外部函数中任何变量的最后更新值

function createFunction() {
    var result = new Array();
    for (var i = 0; i < 10; i++) {
        result[i] = function() {
            return i;
        };
    }
    return result;
}

var func = createFunction();
for (var i = 0; i < 10; i++) {
    document.write(func[i]() + "<br />");
}

输出结果:


res.png

实际上,每个函数都返回10,因为每个函数的作用域都保存着createFunctions()函数的活动对象,它们引用的都是同一个变量i,当函数createFunctions()返回时,活动变量里i是10。

可以通过创建另外一个匿名函数强制让闭包行为符和预期。

function createFunction() {
    var result = new Array();
    for (var i = 0; i < 10; i++) {
        result[i] = function(num) {
            return function() {
                return num;
            }
        }(i);//立即执行该匿名函数的结果赋予数组
    }
    return result;
}

var func = createFunction();
for (var i = 0; i < 10; i++) {
    document.write(func[i]() + "<br />");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   函数表达式是 JavaScript 中的一个既强大有容易令人困惑的特性。定义函数的的方式有两种: 函数声明; ...
    霜天晓阅读 4,276评论 0 1
  • 谈起闭包,它可是JavaScript两个核心技术之一(异步和闭包),在面试以及实际应用当中,我们都离不开它们,甚至...
    强哥科技兴阅读 3,616评论 0 1
  • 1 “政府补偿了一点,自己借了一点外债,和人合伙养殖龙虾,行情不错,还过得去。”分洪搬迁重新安置的老杨打来电话说。...
    横行爸道阅读 3,502评论 0 0
  • 拖延症 人人都会有这种问题 将现在的事情给到老年的自己 看得到将来的自己 agingbooth拍下未来的自己 拖延...
    天蓝的新灵阅读 1,441评论 0 0
  • 去坚强 去戴上手铐脚镣 去艰难地跋涉雄宏高山 迈起满是血水的脚步 去到世界最高峰豪歌一曲 去背上沉沉十字架 到地狱...
    夫哂之阅读 1,589评论 0 0

友情链接更多精彩内容