JS中闭包的概念

2020-02-05  本文已影响0人  正义国王

1. 闭包概念

function foo() {
    var a = 2; //let a = 2;

    function bar() {
        console.log( a );
    }

    return bar;
}

var baz = foo();

baz(); // 2 -- 哇噢,看到闭包了,伙计。

bar() 依然拥有对那个作用域的引用,而这个引用称为闭包

无论我们使用什么方法将内部函数 传送 到它的词法作用域之外,它都将维护一个指向它最开始被声明时的作用域的引用,而且无论我们什么时候执行它,这个闭包就会被行使

2. 一个很好的例子

不使用闭包

for (var i=1; i<=5; i++) {
    setTimeout( function timer(){
         console.log( i );
    }, i*1000 );
}
//6,6,6,6,6

使用闭包

for (var i=1; i<=5; i++) {
    (function(){
        var j = i;
        setTimeout( function timer(){
            console.log( j );
        }, j*1000 );
    })();
}
//1,2,3,4,5

3. 重温块儿作用域

for (var i=1; i<=5; i++) {
    let j = i; // 呀,给闭包的块儿作用域!
    setTimeout( function timer(){
        console.log( j );
    }, j*1000 );
}
//1,2,3,4,5
for (let i=1; i<=5; i++) {
    setTimeout( function timer(){
        console.log( i );
    }, i*1000 );
}
//1,2,3,4,5

以上参考《你不知道的JS》,代码结果已经经过验证。

总结:从以上示例来看:

上一篇 下一篇

猜你喜欢

热点阅读