为什么这个功能只运行一次?

时间:2016-09-24 03:17:33

标签: javascript settimeout

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

我知道setInterval,但这让我感到困惑。

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

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

4 个答案:

答案 0 :(得分:7)

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

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

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

或推迟调用函数直到作业完成后:

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

答案 1 :(得分:2)

OP使变量test成为函数的返回值,而不是函数本身。

你可以这样做:

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

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

答案 2 :(得分:-1)

以下链接包含答案I.e.创建阶段,然后是执行阶段。测试变量在执行阶段是未定义的...当函数执行时。 https://m.youtube.com/watch?v=Bv_5Zv5c-Ts

答案 3 :(得分:-3)

尝试这样

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