javascript - setTimeout 拒绝向回调发送参数

标签 javascript callback arguments settimeout

我一直确信您传递给 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();

jsFiddle

打印出:

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/

相关文章:

javascript - 输入值转换器覆盖change.trigger事件

python - 在 ctypes 回调函数中使用线程锁

javascript - 使用回调 Javascript 在多个函数中获取多个数据

java - 对象不支持此方法或属性错误

javascript - 使用 javascript 将远程页面加载到 DOM 中

javascript - 在浏览器中禁用 'Download This Video' Real Player 按钮

javascript - 如何正确实现javascript回调

Python函数作为函数参数?

Javascript:将参数从多个函数传递给1个函数

unity-game-engine - 将参数预先应用到 unityscript 函数并将其用作发送到另一个函数的对象