未定义值而不是函数中的参数 "f1...."

Undefined value instead of the arguments in the function "f1...."

无法理解为什么函数的参数 f1000f1500 没有传递给包装函数 delay

现在我得到 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"

你传错了arguments

你得到 undefined 因为 the arguments object is a local variable.
传递给 setTimeout 的回调函数没有参数,因此你得到 undefined.

您可以关闭 (closure) 来自外部范围的 arguments 并将它们继续传递:

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"); //