闭包

能够读取其他函数内部变量的函数,缺陷:不会主动释放,会导致内存占用过高

实例(使输出正常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);
}

posted @ 2019-11-03 09:14  淡薄幽清  阅读(23)  评论(0)    收藏  举报