for循环与闭包

for(var i=1;i<5;i++){
setTimeout(function(){console.log(i)},i*1000);
}
在这里for循环是先完成的
然后i的值已经变成了5
那for循环是先执行完的 那i*1000为什么会执行呢

开心每一天1111
浏览 738回答 1
1回答

汪汪一只猫

for循环执行完时相当于在页面中写了4个定时器函数,此时定时器函数还未执行,全局中的i变量值为5;当定时器时间到的时候依次执行定时器函数,依次打印出4个5。这个例子并不是闭包,闭包需要这样写,相当于在页面中写了四个立即执行函数,这四个函数接收到的实参依次为1,2,3,4,根据闭包的特性当定时结束时定时器函数可以访问到其外层函数接收到的实参,所以会依次打印出1,2,3,4&nbsp; &nbsp; for(var i=1;i<5;i++){&nbsp; &nbsp; &nbsp; &nbsp; (function(i){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setTimeout(function(){console.log(i)},i*1000);&nbsp; &nbsp; &nbsp; &nbsp; })(i)&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript