我在这里遇到了一些困惑。请仔细阅读以下代码,
<script>
setInterval(function1,3000);
setInterval(function2(),3000);
function function1() {
console.log("Function1 called....");
}
function function2() {
console.log("Function2 called....");
}
</script>
正如您所看到的,我有两个setInterval
个函数,其中一个调用的函数类似于function1
,另一个调用function2()
。第一个输出完美,每3秒调用一次,3秒后首次调用。但是第二个被称为没有延迟,即function2
。
我猜()
可能会在那里做事,但我不确定我在那里缺少什么。我只是想知道那里发生了什么。
答案 0 :(得分:4)
setInterval(function1,3000);
指示JS引擎每3秒执行一次函数function1
。
setInterval(function2(),3000);
指示JS引擎运行function2
一次,然后每3秒运行一次返回值。此返回值为空。
尝试一下有趣的尝试
function function2() {
console.log("Function2 called....");
return "function3();"
}
function function3() {
console.log("Function3 called....");
}
setInterval(function2(),3000);
修改强>
回应@harsha的评论:“运行返回值”是什么意思
setInterval(function2(),3000);
将触发以下工作流程:
function2()
(执行它,因为它给出了括号)。 function2
运行完成,然后返回。null
setInterval()
调用setInterval(null, 3000);
,每3秒钟不执行任何操作setInterval("function3();", 3000)
,每3秒调用一次eval("function3();");
,然后每隔3秒就会调用function3
。答案 1 :(得分:1)
在第二个setInterval
中,您正在立即执行该操作,并将该函数返回的值插入setInterval
。
例如,
setInterval(a(), 5000);
function a(){
return function(){
console.log("Executed!");
};
};
a()
已执行并将function
返回setInterval
。您应该会看到控制台每5秒写一次Executed
。
这就像数学:
f(x) = x + 1
g(x) = 2
f(g(2)) = g(x) + 2 = 4
You replace g(2) with whatever it returns
(you replace a() with the function in this case)
答案 2 :(得分:1)
()使函数在第二种情况下立即执行。在第一种情况下,只是指向函数的指针,稍后作为回调函数执行。