Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:使用apply方法_Javascript_Apply - Fatal编程技术网

Javascript:使用apply方法

Javascript:使用apply方法,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

这是我的密码:

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(内部参数)

我的目的是对
internal
中的参数调用
add
,这些参数在最后一行
delayAdd(100200)
中定义。然而,这似乎没有发生。这是为什么?我如何解决这个问题?

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

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

apply
调用的结果仅返回到
timeOut
,但是
setTimeout
返回对计时器的引用,而不是从计时器内部返回的结果。