所以,如果我在做:
setInterval(function(){ console.log("1"); },Infinity);
它继续记录1
,好像它是一个for loop
.为什么会这样?
当float/number Infinity
需要在JavaScript中转换为32位整数值时,就像setTimeout一样,它被转换为零:
console.log(typeof Infinity); // number console.log(Infinity | 0); // 0
ECMA-262 6e第7.1.5节
ToInt32 ( argument )
抽象操作
ToInt32
转换argument
为-2 31到2 31 -1 范围内的2 32个整数值之一.这个抽象操作的功能如下:
让数字为
ToNumber(argument)
.
ReturnIfAbrupt(number)
.如果number为NaN,+ 0,-0,+∞或-∞,则返回+0.
[...]