经典闭包
Posted 嘿嘿林子伟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典闭包相关的知识,希望对你有一定的参考价值。
for (var i = 0; i < 5; ++i) {
setTimeout(function () {
console.log(i + ‘ ‘);
}, 100);
}
不能输出正确结果,因为循环中setTimeout接受的参数函数通过闭包访问变量i。javascript运行环境为单线程,setTimeout注册的函数需要等待线程空闲才能执行,此时for循环已经结束,i值为5.五个定时输出都是5 修改方法:将setTimeout放在函数立即调用表达式中,将i值作为参数传递给包裹函数,创建新闭包
for (var i = 0; i < 5; ++i) {
(function (i) {
setTimeout(function () {
console.log(i + ‘ ‘);
}, 100);
}(i));
}
以上是关于经典闭包的主要内容,如果未能解决你的问题,请参考以下文章