调用`setTimeout()`的正确方法

时间:2012-02-22 17:20:04

标签: javascript

我正在处理一个项目,需要调用setTimeout()函数。我不能使用库,所以必须是“纯粹的”JavaScript并且可以在所有浏览器中使用IE6 +或IE7 +。

我可以像这样成功致电setTimeout()

setTimeout("setOpacity('" + elementId + "'," + opacity + ")", 1000);

并且它按预期工作,但是它的字符串评估和我可以在将来做一个包含更多变量并且不能正常工作的图像,所以现在想要使用该技术。

我确实尝试了以下内容:

setTimeout(function () { setOpacity(elementId, opacity); }, 1000);

但是它没有执行超时,而是立即执行。

是否可以在不使用字符串评估的情况下在此处调用setTimeout()

3 个答案:

答案 0 :(得分:0)

为什么你认为“它立即执行”
一秒钟人类的时间不够......

给它10000而不是1000,看看它是否按预期工作。

setTimeout(function () { setOpacity(elementId, opacity); }, 10000); // 10 secs

JSFiddle DEMO

答案 1 :(得分:0)

试试这个:

function delayedCall(callback, timeout, params) {
    setTimeout(function() { callback.apply(null, params); }, timeout);
}

delayedCall(setOpacity, 1000, [elementId, opacity]);

答案 2 :(得分:0)

第二种方式应该有效。

也许你的情况中的原因是另一个,也许当你第一种方式传递你传递的变量是在正确的范围内但不是在从另一个函数内部调用时。