在JavaScript中使用setInterval()函数
Usage of setInterval() function in JavaScript
我不明白为什么下面的代码不起作用。
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(){...}
一样包装函数。你能告诉我一些提示吗,谢谢。。。
代码的问题是setIntegal希望第一个参数是对函数的引用,而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
调用需要参数的函数。
当你不使用匿名函数,即命名函数时,你会用括号调用它,所以删除它,它就会正常工作:
setInterval(doSome, 1000);//You still don't need to wrap interval time within string
问题是setInterval
需要一个函数作为它的第一个参数
JavaScript的美妙之处在于,您甚至可以从doSome
:返回一个函数
function doSome(param){
return function() { console.log(param); }
}
setInterval(doSome("Hi"), 1000);
当然,正确的答案是:
function doSome(){
return console.log("Hi");
}
setInterval(doSome, 1000);
相关文章:
- 可以't获取setInterval函数以使用javascript中的this.function_name调用另一
- 使用setInterval()函数进行图像闪烁
- 在setInterval函数之前声明时未定义对象
- 使用setInterval调用原型函数时出现问题
- setInterval函数不会更改视图中的$scope
- “单独列搜索”上的Datatables setinterval函数
- 如何使用setInterval执行函数
- setInterval可更改函数的背景
- Javascript setInterval 函数来清除自身
- setInterval调用具有未定义参数的函数
- setinterval函数,使用变量的前一个/旧值
- 如何在 setinterval 函数中访问 javascript 数组值
- 如何在 window.setInterval 中每分钟运行一次 getJSON 函数
- 在 jquery 移动中离开页面时结束 SetInterval 函数
- 我将如何在jQuery中切换setInterval函数的状态
- 在setInterval函数内部使用.call()传递参数
- Javascript 函数 setInterval() 只工作一次
- 哪一个最好在 jquery 中连续重复函数 setInterval 或回调函数
- 使用函数setinterval javascript错误使用函数
- 在同步函数中调用异步函数(setinterval)后返回值