gpt4 book ai didi

Javascript setInterval 不起作用

转载 作者:行者123 更新时间:2023-12-02 22:56:29 24 4
gpt4 key购买 nike

我需要每 10 秒运行一次 javascript 函数。

我理解语法必须像下面这样工作,但我没有取得任何成功:

function funcName() {
alert("test");
}

var func = funcName();
var run = setInterval("func",10000)

但这行不通。有什么帮助吗?

最佳答案

许多其他答案都集中在一种确实有效的模式上,但是他们的解释对于您当前的代码为什么不起作用的原因并不是很彻底。

您的代码,供引用:

function funcName() {
alert("test");
}

var func = funcName();
var run = setInterval("func",10000)

让我们把它分成几 block 。您的功能 funcName很好。请注意,当您调用 funcName (换句话说,你运行它)你会警告 "test" .但请注意 funcName() -- 括号表示“调用”或“运行”函数——实际上并不返回值。当一个函数没有返回值时,它默认为一个称为 undefined 的值。 .

调用函数时,将其参数列表附加到括号中的末尾。当您没有任何参数来传递函数时,您只需添加空括号,例如 funcName() .但是当你想引用函数本身而不是调用它时,你不需要括号,因为括号表示要运行它。

所以,当你说:
var func = funcName();

您实际上是在声明一个变量 func值为 funcName() .但请注意括号。 funcName()实际上是 funcName的返回值.正如我上面所说,因为 funcName实际上不返回任何值,它默认为 undefined .所以,换句话说,你的变量 func实际上将具有值 undefined .

然后你有这一行:
var run = setInterval("func",10000)

函数 setInterval有两个参数。第一个是每隔一段时间运行一次的函数,第二个是每次运行函数之间的毫秒数。

但是,第一个参数确实应该是一个函数,而不是一个字符串。如果是字符串,则 JavaScript 引擎将使用 eval而是在那个字符串上。因此,换句话说,您的 setInterval 正在运行以下 JavaScript 代码:
func
// 10 seconds later....
func
// and so on

但是, func只是一个变量(值为 undefined ,但这有点无关紧要)。所以每隔十秒,JS 引擎就会对变量 func 求值。并返回 undefined .但这并没有真正做任何事情。我的意思是,从技术上讲,它每 10 秒就会被评估一次,但你不会看到任何效果。

解决方法是给 setInterval要运行的函数而不是字符串。所以,在这种情况下:
var run = setInterval(funcName, 10000);

注意我没有给它 func .这是因为 func不是 代码中的函数;这是值 undefined , 因为你给它分配了 funcName() .就像我上面说的, funcName()将调用函数 funcName并返回函数的返回值。由于 funcName不返回任何内容,默认为 undefined .我知道我已经说过好几次了,但这确实是一个非常重要的概念:当你看到 funcName() ,你应该想到“ funcName 的返回值”。当你想引用一个函数本身时,比如一个单独的实体,你应该去掉括号,这样你就不会调用它: funcName .

因此,您的代码的另一个解决方案是:
var func = funcName;
var run = setInterval(func, 10000);

但是,这有点多余:为什么要使用 func而不是 funcName ?

或者您可以通过修改两个位来尽可能地保持原始代码的真实性:
var func = funcName;
var run = setInterval("func()", 10000);

在这种情况下,JS 引擎将评估 func()每十秒钟。换句话说,它会提醒 "test"每十秒钟。然而,正如那句名言所说, eval is evil ,所以你应该尽量避免它。

这段代码的另一个转折是使用匿名函数。换句话说,一个没有名字的函数——你只是把它放在代码中,因为你不在乎它叫什么。
setInterval(function () {
alert("test");
}, 10000);

在这种情况下,因为我不关心函数的名称,所以我只留下一个通用的、未命名的(匿名)函数。

关于Javascript setInterval 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8779845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com