我需要帮助理解setInterval() - 这段代码的行为并不像我认为的那样

pma*_*325 0 javascript setinterval

我有这个代码:

var myVar = setInterval(myTimer(13), 1000);

function myTimer(x) {
  console.log(x);
}
Run Code Online (Sandbox Code Playgroud)

目前,它只打印一次13到控制台,但我认为它应该每秒打印一次,对吧?除非我不理解它是如何工作的.我只是想在最基本的层面上分解它.

Sco*_*cus 7

该代码调用错误setInterval(),而是仅使用一次myTimer参数13立即调用.代码应该是:

    var myVar = setInterval(function(){ myTimer(13); }, 1000);
    
    function myTimer(x) {
      console.log(x);
    }
Run Code Online (Sandbox Code Playgroud)

因为setInterval()需要将函数引用传递给它,而不是要调用的实际代码.

发生的事情是myTimer(13)立即被调用(因为这就是那行做的 - 调用一个函数).然后该函数运行并打印13到控制台并且不返回任何内容.然后将"nothing"作为第一个参数传递给它setInterval(),它应该是一个函数引用,但在你的情况下是undefined.undefined不能每秒运行,所以没有其他事情发生.

因为你需要传递一个参数myTimer,你需要通过在它之后添加括号来做到这一点,但这样做会调用函数,所以我们将该函数调用包装在另一个函数声明中,并且该包装器将被调用的函数间隔.它将依次打电话myTimer(13).

现在,如果您不需要将参数传递给myTimer函数,那么您将不需要外部函数包装器并且可以执行以下操作:

    var myVar = setInterval(myTimer, 1000);
    
    function myTimer() {
      console.log("13");
    }
Run Code Online (Sandbox Code Playgroud)

请注意,myTimer旁边没有任何括号?那是因为我们没有尝试调用它,我们只想传递对它的引用.