setInterval with Infinity

时间:2015-12-18 08:00:22

标签: javascript

所以如果我在做:

setInterval(function(){

   console.log("1");

},Infinity);

它会一直记录1,就像它是for loop一样。为什么会这样?

3 个答案:

答案 0 :(得分:7)

当需要在JavaScript中将float / number 0转换为32位整数值时,与setTimeout一样,它将转换为零:

Infinity
  

ECMA-262 6e Section 7.1.5 ToInt32 ( argument )

     

抽象操作console.log(typeof Infinity); // number console.log(Infinity | 0); // 0 ToInt32转换为2 32 整数之一   值范围为-2 31 至2 31 -1,包括端值。这个摘要   操作功能如下:

     
      
  1. 设为argument
  2.   
  3. ToNumber(argument)
  4.   
  5. 如果数字是NaN,+ 0,-0,+∞或-∞,则返回+0。
  6.   
  7. [...]
  8.   

答案 1 :(得分:3)

Infinity仅用于算术,因此其行为仅在算术中定义。在任何其他情况下,它只是an object with some properties

  

无穷大的值是+∞(见6.1.6)。这家酒店有   attributes {[[Writable]]:false,[[Enumerable]]:false,   [[Configurable]]:false}。

由于此对象没有用作delay的{​​{1}}参数,该函数执行就像没有提供对象一样,所以setTimeout

答案 2 :(得分:1)

我最接近的猜测是,与{1}}中指定的区间参数在与时间计数器进行比较时会进行除法,以确定是否应该进行下一次迭代。必须在没有间隔的情况下调用该函数,因为当任何数字除以无穷大时它都为零。

setInterval

在上面的代码中,if (counter / Infinity === 0) callback(); 将针对任何计数器执行。

相关问题