我一直确信您传递给 setTimeout
的所有附加参数都将转发到回调:
function say(what) {
alert(what);
}
setTimeout(say, 500, "Hello world.");
MDN 证实了我的这一信念:
var timeoutID = window.setTimeout(func, [delay, param1, param2, ...]);
但实际代码并不那么重要:
function reload(cb) {
var req = new XMLHttpRequest();
req.open("GET", location.href);
//Call the callback on request completion
req.onload = function() {
console.log("Reloaded, calling callback.");
if(cb!=null)
cb();
else
console.log(" Callback is null.");
}
//Debug info
console.log("Sending request. Callback: "+cb);
console.log(" Arguments: "+arguments.length);
req.send();
}
function waitReload() {
console.log("Reload in 20 ms.");
//Sending 3 arguments in 20ms
setTimeout(reload, 20, waitReload, "BLE", "Number 666");
}
waitReload();
打印出:
Reload in 20 ms.
Sending request. Callback: undefined
Arguments: 0
Reloaded, calling callback.
Callback is null.
没有参数发送到回调函数。为什么?第一个代码也不起作用,它会发出未定义
警报。
最佳答案
IE9及以下版本不支持该参数语法。
为了方便和跨浏览器兼容性,当您需要传递参数时,您应该使用以下语法:
setTimeout(function(){myFunction(param1,param2);} ,5000);
关于javascript - setTimeout 拒绝向回调发送参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30071477/