任何人都可以帮我弄清楚这段代码javaScript代码意味着什么
(function(){
for(var i=0;i<5;i++){
setTimeout(console.log(i),1000);
}
})();
答案 0 :(得分:2)
您遇到了非常常见的关闭问题。要解决此问题,您可以使用自调用函数。您还应该将函数处理程序传递给setTimeout
,而不是调用console.log
:
for(var i=0;i<5;i++){
(function( i ) {
setTimeout( function( ) {
console.log(i);
},1000);
})( i );
}
如果要以1000毫秒的间隔打印到0到4之间的控制台号码,则应使用setInterval
功能:
var intervalHandler = null
, i = 0;
intervalHandler = setInterval( function() {
console.log( i );
if( i === 4 ) {
clearInterval( intervalHandler );
return;
}
i++;
}, 1000 );
答案 1 :(得分:1)
您的代码基本上调用了一个将要记录的函数
0
1
2
3
4
单次,为什么?因为setTimeout实际上运行setTimeout(undefined, 1000)
5次,根据console.log
的返回值,它不会计算函数,所以指令就会丢失。
虽然根据我对代码试图说的内容的理解,为了使代码能够正常工作,您可以将迭代控件委托给以setSimeout
延迟的自调用函数
(function self(times, delay) {
self.config = self.config || {
times: times,
delay: delay,
iteration: 0
};
++self.config.iteration;
if (self.config.iteration <= self.config.times) {
console.log(self.config.iteration);
setTimeout(self, self.config.delay);
}
})(5, 1000);
答案 2 :(得分:0)
for(var i=0;i<5;i++)
//这段代码在中断前五次循环。
即,它将执行此功能五次setTimeout(console.log(i),1000);
。
setTimeout()是一个用于延迟的javascript函数,它会延迟1秒,然后执行console.log(i);
的操作。