关于setTimeout实现间隔打印

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个函数都不是