浅显地明白javascript闭包

定义

闭包是一个具有很多变量和绑定了这些变量的环境的表达式(通常是一个函数),因此这些变量也是该表达式的一部分。。(百度百科)

浅显的说:JavaScript中所有的function都是一个闭包

案例解读

  • 基础案例

function foo() {
    var i = 0;
    return function() {
        return ++i;
    }
}

var bar=foo();

《浅显地明白javascript闭包》

这里的foo运转后返回了一个函数,这个函数具有一个本身私有的变量i,这个变量i不会由于foo运转完毕了就被烧毁。
返回的这个函数被赋值给bar,这个bar就是一个闭包,它的特性是具有本身的私有成员,该例子中私有成员是变量i,这个私有成员可所以一个函数

  • 带有轮回的闭包

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

return result;
}

var bar = foo();

《浅显地明白javascript闭包》

征象如上,原因是轮回天生了10个闭包,然则,他们的私有成员i是他们共有的,当末了一个闭包函数天生后,i的值已即是10,而前面的闭包的i都是这个i

  • 轮回天生闭包而且具有真正的本身i

function foo() {
    var result = [];
    for (var i = 0; i < 10; i++) {
        result[i] = (function(i) {
            return function() {
                return i
            }
        })(i);细致对照这里的区分
    }

    return result;
}

var bar = foo();

《浅显地明白javascript闭包》

明显,轮回天生的每一个闭包都真正具有的本身私有变量,解决办法是代码中的自实行函数包裹须要天生的闭包函数,并为闭包函数供应一个自力的变量,这个时刻它们的i是来自包裹它们的自实行函数的参数,而不是适才的foo内里的谁人i,所以它们各是各的

总结

闭包的用处在我看来是为函数供应私有的变量,使得数据平安,不会污染他人的变量,他人的成员,他人的妻子。

每一个家庭就比如一个闭包函数,差别的家庭有差别的妻子、老公、孩子,他们的名字以至也可所以一样的,然后每一个家庭是自力的。

    原文作者:Prasanta
    原文地址: https://segmentfault.com/a/1190000004227572
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞