Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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如何处理将setInterval()赋值给变量的问题?_Javascript_Jquery - Fatal编程技术网

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

Javascript如何处理将setInterval()赋值给变量的问题?,javascript,jquery,Javascript,Jquery,我有一个基本的javascript问题,我无法理解。为什么下面的代码片段有效(取自w3学校) 本质上我要问的是,为什么下面的“myVar”变量在没有显式调用的情况下执行setInterval方法?我最好的猜测是这与javascript处理变量赋值的方式有关 <html> <body> <p>Click the button to wait 3 seconds, then alert "Hello".</p> <p>After clic

我有一个基本的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>
所以我的问题是,为什么上面的操作不在别处调用“refresh”变量?

setInterval()
本身执行循环调用(请参见编辑)并返回处理循环调用的进程的ID。分配返回值的目的是在以后使用
clearInterval()
,因为它要求您将
setInterval()
(=进程ID)的返回值作为其参数传递

在您的情况下,如果希望传递给
setInterval()
的函数不再被调用(通过使用
setInterval
创建的“循环调用链”),只需执行
clearInterval(刷新)

编辑

setInterval
需要两个参数:内联函数(或函数指针)和整数


setInterval
所做的是等待
{integer passed}
毫秒,然后调用函数并反复执行相同的操作,直到调用
clearInterval
passing
setInterval
的返回值。

setInterval将立即启动计时器以运行函数。函数只返回一个ID来跟踪计时器,以便稍后取消它。请参阅下面的文档

它不会“在没有显式调用的情况下执行
setInterval
方法”。显式调用就在这里:
myVar=setInterval(alertFunc,3000)函数内部
myFunction

myvar
包含调用的返回
setInterval

myVar=setInterval(alertFunc,3000)

这不是将函数变量存储到myVar,而是将“setInerval”函数的输出存储到myVar

例如,在下面的代码中,您将testfunc()的返回赋值给test

如果您想将testfunc函数分配给测试,您必须像

var test;
function foo(){
  test = testfunc;
}
function testfunc(){
  console.log("hi");
}
foo();

然后您需要显式调用

setInterval
将安排作为其第一个参数传递的函数表达式/引用的循环执行,并为此计划返回唯一标识符。传递的函数将每X毫秒调用一次(此间隔是传递给
setInterval
的第二个参数)。使用
setInterval
不需要将其返回值赋给变量。存储此标识符的主要原因是通过调用
clearInterval(yourIntervalIdHere)
来取消此计划

要调用变量吗?怎么用?变量对我们隐瞒了什么吗?!变量有自己的方法吗?请投反对票,选出正确答案。多可爱啊。请注意“本质上我要问的是,为什么下面的“myVar”变量在没有显式调用的情况下执行setInterval方法?”你们这些孩子是不是又在通过对彼此的答案进行向下投票来吵架?而且,从技术上讲,你们的答案是不正确的。它不会立即执行函数(至少你的回答暗示了这一点),因为它只是传递一个函数引用,稍后执行。对不起?这是一个函数调用。注意括号?这就是我们如何判断这是一个函数调用。从本页的第一行开始:“setInterval()方法”。是的,但您作为参数移交的函数不会立即执行!它只是简单地添加到事件循环中,并在以后执行(这也是OP被混淆的原因)。感谢您的响应!我只是有点困惑,这是setinterval()本身的特性还是与javascript赋值有关。现在更有意义了。再次感谢!好吧,这是有道理的。只是澄清一下,在上面的第一个代码段中,调用foo()时,testfunc()将立即运行,并将输出存储到“test”中,而在第二个代码段中,只有明确地调用test(),才能调用“testfunc”函数。在java脚本中,函数是对象,因此您可以调用函数并获取输出和存储(第一个代码段),也可以直接将函数存储在变量中(第二个代码段)
var test;
function foo(){
  test = testfunc();
}
function testfunc(){
  console.log("hi");
}
foo();
var test;
function foo(){
  test = testfunc;
}
function testfunc(){
  console.log("hi");
}
foo();