如何在javascript中控制for循环执行[这个javascript代码应该怎么做]

时间:2014-01-30 19:02:58

标签: javascript

任何人都可以帮我弄清楚这段代码javaScript代码意味着什么

  (function(){
  for(var i=0;i<5;i++){
    setTimeout(console.log(i),1000);
  }
})();

3 个答案:

答案 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);的操作。