![](/img/trans.png)
[英]Calling a function when using setTimeout() and setInterval() in JavaScript
[英]Calling function from array using setTimeout in Javascript
我正在创建两个函数名称call和call2并将这两个函数放在数组x中。 在另一个称为计时器的函数中,我试图每2秒调用一次此函数。 但是它给人的错误是期望一个分配或函数调用而不是show和expression 。
而且我也不希望在创建数组时运行此函数。 这是我的代码http://jsbin.com/IMiVadE/2/
function call(name)
{
console.log("Hello " + name);
}
function call2()
{
console.log("Hello world");
}
var x = [call("Nakib"), call2()];
var i = 0;
function timer(x, i)
{
x[i];
i++;
if(i<x.length)
window.setTimeout(timer(x, i), 2000);
}
timer(x, i);
您的代码中有一些错误:
这是您的代码正常工作: http : //jsbin.com/IMiVadE/6/edit
sayHello(name)是一个函数,它会生成输出特定“ Hello ...”文本的新函数。
function sayHello(name)
{
return function () {
console.log("Hello " + name);
}
}
function timer(x, i)
{
x[i]();
if (i < x.length - 1) {
setTimeout(function () {
timer(x, i + 1);
}, 2000);
}
}
var x = [sayHello("Nakib"), sayHello("world")];
setTimeout(function () {
timer(x, 0);
}, 2000);
setTimeout
需要一个没有参数的函数。 因此,您可以将对timer
的递归调用包装在一个匿名函数中,以解决此问题:
window.setTimeout(function(){timer(x, i)}, 2000);
另外,定时器函数的第一行仅由x[i];
,虽然可能不是造成您问题的原因,但却没有用。
setTimeout
函数将一个函数作为参数,您要在传递timer
函数之前执行它,并且由于timer
不返回任何内容,因此会将undefined
传递给超时。
window.setTimeout(timer(x, i), 2000); // is the same as...
window.setTimeout(undefined, 2000);
它应该是;
window.setTimeout(function() { timer(x, i) }, 2000); // or...
window.setTimeout(timer.bind(this, x, i), 2000);
我不确定这是否是故意的,但是您对数组执行的操作相同;
var x = [call("Nakib"), call2()];
这将执行函数,其结果将存储在数组中。 这是你想要的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.