闭包的理解

直白点,它由两部分组成,执行上下文A,和在该执行上下文创建的函数(B),

当B执行时,访问了A的局部变量 此时就会形成闭包。

经典的闭包实用例子:

//更改该代码块,使其 输出 1,2,3,4,5
for (var i = 1; i <= 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, i * 1000);
}

解决方案:

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

for (var i = 1; i <= 5; i++) {
    setTimeout(function(i) {
        //立即输出
        console.log(i);
    }(i), i * 1000);
}

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

// es6
for (let i = 1; i <= 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, i * 1000);
}
原文地址:https://www.cnblogs.com/xbgTitle/p/8744686.html