Javascript: 使用apply方法
Javascript: using the apply method
这是我的代码:
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);
...
这是我的代码:
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);
...