A:
for(var i=1;i<4;i++){
(function(j){
setTimeout(function(){
console.log(j);
},1000*j);
})(i);
}
B:
for(var i = 0;i<4;i++){
setTimeout((function(j){
console.log(j);
})(i), i*1000)
}
知道A是闭包,但是不理解为什么B不能实现隔一秒打印,
网上搜到的,应该能帮到你
setTimeout
的第一个参数必须是**需要编译的代码**或者是一个**函数方法**,而如果直接传入一行可执行代码,那么抱歉,这里会立即执行,没有延迟效果。
你理解错什么是闭包了,A是自执行函数。
B你立即执行匿名函数,将匿名函数的返回值作为setTimeout要执行的代码,匿名函数没有返回值,所以计时器什么都没做。。
结构要搞清楚,所以是一下就执行了4个匿名函数打印出01,2,3了
(function (j) {
console.log(j);
})(i)
B中函数是立即执行的,并没有通过setTimeout延时。
你只是把函数执行的返回值(函数没有返回值就是返回 undefined)传给setTimeout。这没有什么用
B中函数是立即执行的,并没有通过setTimeout延时。
你只是把函数执行的返回值(函数没有返回值就是返回 undefined)传给setTimeout。这没有什么用
可以改成
for(var i = 0;i<4;i++){
setTimeout((function(j){
return function () {
console.log(j);
};
})(i), i*1000)
}
用setInterval啊,setTimeout是只执行一次啊
还有,你这个更本就不是闭包,2个函数都不是