概览
块级作用域与闭包的结合功能强大。
内容
思考:
for (var i = 0; i < 5; i++) {
setTimeout(function Timer() {
console.log(i);
});
}
分析:尽管循环中的函数是在各个迭代中分别定义,但是它们都被封闭在共享的全局作用域中,实际上只有一个i。
1 利用IIFE:
for(var i = 0; i < 5; i++) {
(function print() {
var j = i;
setTimeout(function() {
console.log(j)
}, j*1000);
})();
}
2 利用let、const:
for(let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, i * 1000);
}
网友评论