为什么这段代码输出连续的数字?

Cri*_*sty 3 javascript

我试图发布一个基本的JS技巧问题,它显然也欺骗了我:)

在您的控制台中运行:

x = (w) => w.length;
setTimeout(console.log(x), 0);
Run Code Online (Sandbox Code Playgroud)

每次你跑步,setTimeout(console.log(x), 0);你都会得到越来越多的数字.这是为什么?w参数不应该引用到window对象?

Rya*_*yan 10

setTimout返回一个值.您将看到计时器ID,它是setTimeout的返回值,可用作clearTimeout调用的参数.

返回的timeoutID是一个非零数值,用于标识调用setTimeout()创建的计时器; 可以将此值传递给Window.clearTimeout()以取消超时.[0]

[0] https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout

w参数不会引用窗口对象.console.log返回undefined,因此永远不会调用您的函数.