无法理解为什么功能 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"
答案 0 :(得分:4)
你传的是错误的arguments
。
由于the arguments object is a local variable,您获得了undefined
传递给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"); //