未定义的值而不是函数“f1 ....”中的参数。

时间:2017-12-29 21:54:10

标签: javascript function wrapper

无法理解为什么功能 f1000 的参数和 f1500 未传递给包装函数延迟

现在我得到 undefined ,而不是test和test2的正确结果。

function f(x) {
  console.log( x );
}

function delay(f, ms) {
    return function() {
        setTimeout(function(){ 
            var delayed = f.apply(this, arguments);
            return delayed;
        }, ms);
    }
}

var f1000 = delay(f, 1000);
var f1500 = delay(f, 1500);

f1000("test"); // must display "test"
f1500("test2"); // must display "test2"

1 个答案:

答案 0 :(得分:4)

你传的是错误的arguments

由于the arguments object is a local variable,您获得了undefined 传递给setTimeout的回调函数没有参数,因此得到undefined

您可以从外部范围关闭(closurearguments并传递它们:



function f(x) {
  console.log(x);
}

function delay(f, ms) {
  return function() {
    var args = arguments;
    setTimeout(function() {
      var delayed = f.apply(this, args);
      return delayed;
    }, ms);
  }
}

var f1000 = delay(f, 1000);
var f1500 = delay(f, 1500);

f1000("test"); // 
f1500("test2"); //