Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:如果我';我已经在使用一个外部函数了?_Javascript_Html_Function - Fatal编程技术网

Javascript:如果我';我已经在使用一个外部函数了?

Javascript:如果我';我已经在使用一个外部函数了?,javascript,html,function,Javascript,Html,Function,如果我已经在使用外部函数,为什么我需要定义自调用匿名函数 让我们用这些简单的例子 为什么这样做有效: var countDown=60; function myTimer() { document.getElementById("timer").innerHTML=countDown; countDown--; } var stopper=setInterval(function(){myTimer()},1000); 但这并不是: var countDown=60; f

如果我已经在使用外部函数,为什么我需要定义自调用匿名函数

让我们用这些简单的例子

为什么这样做有效:

var countDown=60;

function myTimer()
{
    document.getElementById("timer").innerHTML=countDown;
    countDown--;
}

var stopper=setInterval(function(){myTimer()},1000);
但这并不是:

var countDown=60;

function myTimer()
{
    document.getElementById("timer").innerHTML=countDown;
    countDown--;
}

var stopper=setInterval(myTimer(),1000); //self invoking anonymous function removed

我觉得这很奇怪,因为我已经调用了一个外部函数,那么为什么我需要在自调用匿名函数中直接调用它呢?

第一个示例很有效,因为您将函数作为第一个参数传递给
setInterval
函数。这就是
setInterval
所期望的

在第二个示例中,您没有传递函数引用,而是传递函数调用的结果:
setInterval(myTimer(),1000)

您需要传递函数本身,因此需要执行以下操作:

setInterval(myTimer,1000)

试试var stopper=setInterval(myTimer,1000);没有()