setTimeOut执行带参数的函数

时间:2011-12-31 16:17:14

标签: javascript settimeout

我看到了this question,我想知道这有什么问题?

var id = 12;
setTimeout( showGrid ( 'i want to pass variable ' + id + ' here' ), 5000 );

我读到的问题我对上面的代码不是一个好的解决方案感兴趣。我只安装了Chrome,我已经尝试过了,但它确实有效。它有浏览器问题吗?

为什么匿名功能更好?

3 个答案:

答案 0 :(得分:5)

您可以使用闭包:

var id = 12;
setTimeout(function() {
    showGrid('i want to pass variable ' + id + ' here');
}, 5000);

这是一个live demo

从评论中编辑(Milo):

  

setTimeout函数需要回调或字符串变量。你没有传递这样的东西,所以你的代码无效。您正在直接调用showGrid函数,而不是它应该如何工作。应该仅在5秒后调用showGrid函数。

答案 1 :(得分:2)

setTimout期望将函数作为其第一个参数,将时间作为其第二个参数,然后将可选参数传递给函数。所以,如果你有一个功能:

function showGrid( str ) {
    return str;
}

您有以下setTimeout

setTimeout( showGrid( "..." ), 5000 );

然后你正在调用showGrid并将返回值传递给setTimeout,所以它最终会这样:

// "..." is returned from showGrid( "..." )
setTimeout( "...", 5000 );

"..."不是函数。所以有两种方法可以解决这个问题,你可以制作一个封闭空间(如达林的答案),或者在时间之后添加参数。

setTimeout( function() {
    showGrid( "..." );
}, 5000 );

// same thing
setTimeout( showGrid, 5000, "..." );

示例:http://jsfiddle.net/fFg57/

答案 2 :(得分:1)

var id = 12;
setTimeout( "showGrid ( 'i want to pass variable " + id + " here' )", 5000 );

第一个参数采用字符串,就像传递给eval函数的那样。

并注意o

中的小setTimeout