如何将参数传递给setTimeout()回调?

时间:2013-11-15 22:39:27

标签: javascript parameters settimeout

这有什么区别:

function blankWord(){
    console.log('blank!');
    setTimeout(blankWord, 5000);
}
blankWord();

每5秒调用一次该函数,并且:

function blankWord(t){
    console.log('blank!');
    setTimeout(blankWord, t);
}
blankWord(5000);

哪个函数反复疯狂地快速调用?

2 个答案:

答案 0 :(得分:8)

由于您在第二个表单中缺少参数,因此从第二个调用开始传递undefined,这实际上会导致4ms的超时(which is the browser minimum)。

使用函数包装器安全地传递所需的参数:

function blankWord(t){
    console.log('blank!');
    setTimeout(function(){blankWord(t)},t);
}
blankWord(5000);

将参数作为第三个参数传递来淘汰旧IE,这就是为什么在IE8死之前不应该使用它。

答案 1 :(得分:6)

第一个脚本每次都使用第二个参数5000调用setTimeout。

第二个脚本使用t调用它。第一次是5000(来自blankWord(5000);)。随后每次undefined(来自setTimeout(blankWord)。

如果要传递参数,请将它们作为setTimeout的第三个参数传递给数组。

setTimeout(blankWord, t, [t])

请参阅mdn for a polyfill以支持不识别该函数的三个参数形式的旧浏览器。