Javascript如何处理将setInterval()赋值给变量?

时间:2017-04-19 16:18:31

标签: javascript jquery

我有一个基本的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;变量在其他地方?

5 个答案:

答案 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的回复。