2015-12-18 33 views
2

這裏是我的代碼:的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 = delay(add, 500); 

delayAdd(100,200); //should log 300 to console after 500ms 
        //instead, it logs NaN 

我懷疑問題是在9號線:return func.apply(inner, arguments); 我的本意是爲add就在inner的參數,這些參數在定義調用最後一行delayAdd(100,200)。但是,這似乎並沒有發生。這是爲什麼,我該如何解決這個問題?

+1

'apply'調用的結果只返回給'timeOut',但是'setTimeout'返回一個對計時器,而不是從裏面返回的結果。 – adeneo

回答

2

arguments關鍵字特定於它所引用的範圍。事實上,你正在傳遞你的setTimeout函數的參數。你需要做的是從你想要的範圍保存一個參考,並通過:

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