如下代码:
for(var i = 0,l = 5;i<l;i++){
setTimeout((function(j){
return function() {
console.log(j)
}
})(i),500)
}
按理说 500毫秒以后,函数只是被return了,但是实际是console被执行了,请问是为什么?
如下代码:
for(var i = 0,l = 5;i<l;i++){
setTimeout((function(j){
return function() {
console.log(j)
}
})(i),500)
}
按理说 500毫秒以后,函数只是被return了,但是实际是console被执行了,请问是为什么?
大家都说到点子上了,我给个正确答案吧。
for(var i=0, l=5; i<l; i++) {
(function(number){
setTimeout(function(){return function(){console.log(number)}}, 500);
}(i));
}
1 回答851 阅读✓ 已解决
1 回答1.1k 阅读
2 回答773 阅读
2 回答617 阅读
2 回答601 阅读
1 回答678 阅读
2 回答520 阅读
因为
setTimeout就是在指定延时之后执行第一个参数,也就是传入的函数。你以为
setTimeout执行的是:但其实这一串是一个 IIFE,当解释器读到这些代码的时候就已经把它执行了,然后返回了:
所以,
500ms过后,setTimeout实际执行的正是被返回之后的这个函数体。