我有一个基本的javascript问题,我无法解决这个问题。为什么下面的代码片段工作(取自w3学校)?
基本上我要问的是为什么" myVar"下面的变量执行setInterval方法而没有显式调用?我最好的猜测是,这与javascript处理变量赋值的方式有关吗?
<html>
<body>
<p>Click the button to wait 3 seconds, then alert "Hello".</p>
<p>After clicking away the alert box, an new alert box will appear in 3 seconds. This goes on forever...</p>
<button onclick="myFunction()">Try it</button>
<script>
var myVar;
function myFunction() {
myVar = setInterval(alertFunc, 3000);
}
function alertFunc() {
alert("Hello!");
}
</script>
</body>
</html>
如果需要进一步说明,请参阅我目前的工作中的代码片段:
var refresh = setInterval(function() {
$("#div").load('Query.html');
}, 1000);
所以我的问题是,为什么上面的工作没有调用&#34;刷新&#34;变量在其他地方?
答案 0 :(得分:6)
bhp
进行循环调用(参见edit)并返回处理循环调用的进程的ID。分配返回值的目的是之后使用setInterval()
,因为它要求您传递clearInterval()
(=进程ID)的返回值作为其参数。
在您的情况下,如果您希望不再调用setInterval()
中传递的功能(通过&#34;循环调用链&#34;您使用setInterval()
创建),您可以简单地做setInterval
。
修改
clearInterval(refresh)
需要两个参数:内联函数(或函数指针)和整数。
setInterval
做的是等待setInterval
毫秒然后调用该函数并反复重做相同的事情,直到您通过{integer passed}
来调用clearInterval
&#39}返回值。
答案 1 :(得分:3)
setInterval
将安排作为第一个参数传递的函数表达式/引用的重复执行,并为此调度返回唯一标识符。传递的函数将每X毫秒调用一次(此间隔是传递给setInterval
的第二个参数)。您不需要将其返回值分配给变量以使用setInterval
。存储此标识符的主要原因是之后通过调用clearInterval(yourIntervalIdHere)
取消此调度。
答案 2 :(得分:1)
setInterval将立即启动计时器以运行该功能。该函数只返回一个ID来跟踪定时器,以便以后取消它。请参阅以下文档。
https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/timers#setInterval(callback_ms)
答案 3 :(得分:1)
myVar = setInterval(alertFunc,3000);
这不是将函数变量存储到myVar,而是存储&#34; setInerval&#34;的输出。函数到myvar。
对于更简单的示例,在下面的代码中,您将testfunc()的返回值分配给test。
var test;
function foo(){
test = testfunc();
}
function testfunc(){
console.log("hi");
}
foo();
如果你想分配testfunc函数来测试你必须像
那样写var test;
function foo(){
test = testfunc;
}
function testfunc(){
console.log("hi");
}
foo();
然后你需要明确地调用
答案 4 :(得分:-1)
它没有“在没有显式调用的情况下执行setInterval
方法”。显式调用就在这里:函数myVar = setInterval(alertFunc, 3000);
内的myFunction
。
myvar
包含致电setInterval
的回复。