闭包
能够读取其他函数内部变量的函数,缺陷:不会主动释放,会导致内存占用过高
实例(使输出正常0,1,2,3):
for (var i = 0; i < 4; i++) {
setTimeout(function() {
console.log(i);
}, 300);
}
//4 4 4 4
//因为js执行的时候会先执行主线程,而异步相关的会存到异步队列里面,当主线程执行完毕再开始执行异步队列
解决办法
1.闭包
for (var i = 0; i < 4; i++) {
setTimeout((function(i){
return console.log(i);
})(i), 300);
}
2.自执行函数
for (var i = 0; i < 4; i++) {
(function (i) {
setTimeout(function () {
console.log(i);
}, 300);
})(i)
}
3.不使用var,使用let定义
for (let i = 0; i < 4; i++) {
setTimeout(function () {
console.log(i);
}, 300);
}

浙公网安备 33010602011771号