我看到了this question,我想知道这有什么问题?
var id = 12;
setTimeout( showGrid ( 'i want to pass variable ' + id + ' here' ), 5000 );
我读到的问题我对上面的代码不是一个好的解决方案感兴趣。我只安装了Chrome,我已经尝试过了,但它确实有效。它有浏览器问题吗?
为什么匿名功能更好?
答案 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, "..." );
答案 2 :(得分:1)
var id = 12;
setTimeout( "showGrid ( 'i want to pass variable " + id + " here' )", 5000 );
第一个参数采用字符串,就像传递给eval
函数的那样。
并注意o
setTimeout