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

Javascript 为什么这段代码会输出连续的数字?,javascript,Javascript,我试图发布一个基本的JS技巧问题,它显然也在欺骗我:) 在控制台中运行此命令: x = (w) => w.length; setTimeout(console.log(x), 0); 每次运行setTimeout时(console.log(x),0)你会得到一个越来越多的数字。为什么呢?w参数是否应该引用窗口对象?返回一个值。您将看到计时器id,它是setTimeout的返回值,可以用作调用的参数 返回的timeoutID是一个数字非零值,用于标识 通过调用setTimeout()创建的

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

在控制台中运行此命令:

x = (w) => w.length;
setTimeout(console.log(x), 0);
每次运行
setTimeout时(console.log(x),0)你会得到一个越来越多的数字。为什么呢?
w
参数是否应该引用
窗口
对象?

返回一个值。您将看到计时器id,它是setTimeout的返回值,可以用作调用的参数

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

[0]


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

看起来它增加了w。简化的
让x=w+w
@zer00ne,但是
w
不是一个变量,它只是一个引用其他变量的参数。可能是
窗口
对象。为什么调用函数会增加任何东西?@self什么上下文?这就是所有代码,在浏览器控制台的新选项卡中运行它。就像self所说的,
setTimeout
返回一个反映在控制台中的值。我从来没有遇到过这样的问题,我有一种倾向,就是过度地预先声明所有变量。@DanPantry,这是因为
未定义的
值不是一个函数。console.log返回未定义的,很可能浏览器运行时只是忽略了它不是函数的事实哦,天哪,你说得对。我一直认为这是记录的值,我忽略了控制台中的
函数…
log,它实际上记录了
x
函数:Tbh,这实际上很难被注意到,你们在那个里获得了很好的bug发现技术:DGlad它很有帮助@克里斯蒂:我鼓励你接受我的回答:)是的,对不起,我忘了:D