根据specification

long setInterval(Function handler, optional long timeout, any... arguments);
setInterval()应该接受long超时延迟。

但是,在64位Linux上,它的行为就像是一个签名的32位int。
我没有在其他平台上测试please try并发表评论。

显而易见的问题是-为什么?

有人可以解释为什么我要立即输出:

let maxSigned32 = 2147483647;
let safeInt = maxSigned32 + 1;

console.log(safeInt);
console.log(Number.MAX_SAFE_INTEGER);
console.log(safeInt < Number.MAX_SAFE_INTEGER); // true

let days = Math.round(safeInt / (1000.0 * 60 * 60 * 24));

console.log(safeInt + ' ms is ~' + days + ' days');

setTimeout(() => {
  console.log('I should not see this today')
}, safeInt);


我在Chrome 52和Firefox 48上都得到此(错误?)结果。
有趣的是,当我构建并尝试使用最新的ChakraCore时,它的行为更加合理。

最佳答案

Web IDL中的long类型不应与其C / C++命名相比较。

其定义可以在here中找到:

09-28 00:48