Javascript 为什么这个函数只运行一次?

Javascript 为什么这个函数只运行一次?,javascript,settimeout,Javascript,Settimeout,我真的认为这应该每100毫秒运行一次,但它只发出一次嘟嘟声 我知道setInterval,但这让我很困惑 var test = function () { console.log('beep') setTimeout( test, 100 ); }(); 有人知道为什么它只运行一次而不是永远吗?OP让变量测试函数的返回值,而不是函数本身 你可以做: var test = function(){ setTimeout(test,100); }; test(); 或 匿名

我真的认为这应该每100毫秒运行一次,但它只发出一次嘟嘟声

我知道setInterval,但这让我很困惑

var test = function () {
    console.log('beep')
    setTimeout( test, 100 );
}();

有人知道为什么它只运行一次而不是永远吗?

OP让变量
测试函数的返回值,而不是函数本身

你可以做:

var test = function(){
    setTimeout(test,100);
};
test();


匿名函数在分配给
test
之前正在执行

可以将其声明为命名函数表达式:

(功能测试(){
console.log('beep')
设置超时(测试,100);

})();像这样尝试

var test = function () {
console.log('beep');
}
setInterval(test, 300);

下面的链接包含答案,即创建阶段,然后是执行阶段。当函数执行时,测试变量在执行阶段未定义。

提示:
var test=function(){console.log('beep');setTimeout(test,100);返回“我不是函数”}();控制台日志(测试)@torazaburo也许你应该做同样的“同样的”=在控制台中运行它。不幸的是,调用
setTimeout(undefined,100)
不会产生错误。它
test
不是一个函数(也不是),test()显然会失败,不是吗?我是说在OP的代码中,他将
test
作为匿名函数的返回值。也许你应该编辑以显示你建议更改的内容。我想我明白了,但不是很清楚。我认为这个答案基本上是正确的。测试未设置为任何值。这就是代码不循环的原因。很抱歉。他在电话里回答。现在编辑它使它更清晰。OP知道setInterval。这并不能回答他们的问题。虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。基本部分是执行阶段,在创建阶段,JavaScript运行时引擎将测试设置为未定义。我还添加了参考链接它不是匿名的,我在里面放了一个
var
,给了它一个名字和所有的东西,那提升呢?(头爆炸)谢谢!现在,如果我们能找出这个答案的谷歌查询问题…@DigitalDesignDj您的代码声明了一个名为“test”的变量,然后将立即调用的函数表达式的返回值赋给它。IIFE不需要括号,因为编译器已经知道它是一个表达式,而不是一个声明。(顺便说一句,返回值未定义,但honey badger^h编译器不在乎)@DigitalDesignDj它是匿名的,因为它在赋值操作之后才有引用它的名称。你可能对阅读感兴趣。
var test = function () {
console.log('beep');
}
setInterval(test, 300);