Javascript:使用 apply 方法

标签 javascript apply

这是我的代码:

var add = function(x,y) {
  console.log(x + y);
}


var delay = function(func, wait) {
  var inner = function() {
    return setTimeout(function() {
      return func.apply(inner, arguments);
    }, wait);
  }
  return inner;
};

var delayAdd = delay(add, 500);

delayAdd(100,200); //should log 300 to console after 500ms
                   //instead, it logs NaN

我怀疑问题出在第 9 行:return func.apply(inner,arguments); 我的目的是对 inner 中的参数调用 add,这些参数在最后一行 delayAdd(100,200) 中定义。然而,这似乎并没有发生。这是为什么?如何解决这个问题?

最佳答案

arguments 关键字特定于它所引用的范围。实际上,您正在传递 setTimeout 函数中的参数。您需要做的是保存所需范围内的引用,然后传递该引用:

   var inner = function() {
      var args = arguments;
      return setTimeout(function() {
         return func.apply(inner, args);
         ...

关于Javascript:使用 apply 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34346563/

相关文章:

java - 使用谷歌API从Json获取地名

javascript - 单击 HTML 按钮后禁用该按钮的最快方法是什么?

javascript - 如何确保在执行脚本之前包含某些库?

python - 多维数据上的 numpy apply_along_axis 计算

python - pandas 应用参数没有 lambda 的函数

r - 对内部使用 grepl 的 vapply 函数感到困惑(datacamp 类(class)的一部分)

r - 跨字符串向量迭代单词并将更改应用于单个单词

javascript - 了解 "global"正则表达式

javascript - 如何从单个常见的 ajax 函数读取响应?

r - 制作一个矩阵列表,其中每个矩阵都是数据帧的一行