2015-12-18 2 views
2

Вот мой код:JavaScript: с помощью метода применяются

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); 
     ... 
Смежные вопросы