直白点,它由两部分组成,执行上下文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); }