我不明白为什么下面的代码不起作用。
function doSome(){
console.log("Hi");
}
setInterval(doSome(), '1000');
我的期望:
// every second
Hi
Hi
Hi
...
但结果
TypeError: Cannot read property 'call' of undefined
at wrapper [as _onTimeout] (timers.js:275:18)
at Timer.listOnTimeout (timers.js:92:15)
好的,如果我将 setInterval(doSome(), '1000');
更改为 setInterval(function(){doSome()}, '1000');
该代码运行良好。但我不知道有什么不同,也不知道为什么我必须像 function(){...}
那样包装函数,你能告诉我一些提示吗,谢谢...
最佳答案
代码的问题是 setInteval 期望第一个参数是对函数的引用,而 doSome()
将计算为某个值,在本例中 null
.
您想要的是以下内容:
function doSome(){
console.log("hi");
}
setInterval(doSome, 1000);
正如您所指出的,您还可以使用匿名函数(返回对该函数的引用)来调用您真正想要执行的函数。这对于调用带有参数的函数很有用。
function doMore(x, y){
if (x < y)
console.log("Hi");
else
console.log("Bye");
}
setInterval(function(){ doMore(0,1);}, 1000);
第二个示例很简单,但展示了如何使用 setInterval
调用需要参数的函数。
关于javascript - JavaScript 中 setInterval() 函数的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34504092/