2016-08-09 2 views
3

Может кто-нибудь объяснить мне, как реализована функция _.before, так как я действительно не понимаю, почему внутренняя переменная times отслеживает каждый вызов функции. Разве это не должно быть в локальном масштабе и каждый раз перезагружаться, как обычные функции?underscore.js .be function function

Код для _.before функции:

// Returns a function that will only be executed up to (but not including) the Nth call. 
    _.before = function(times, func) { 
    var memo; 
    return function() { 
     if (--times > 0) { 
     memo = func.apply(this, arguments); 
     } 
     if (times <= 1) func = null; 
     return memo; 
    }; 
    }; 

Спасибо.

+0

Вам нужно это http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – Maxx

ответ

0

Из-за концепции с именем closures возвращенная функция в вашем примере «запоминает» среду, в которой она была создана. В этом случае он запоминает как аргументы times, так и func, даже если он возвращается.

Подробнее о замыканиях: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

0

Ключ func.apply(this, arguments) делает анонимную функцию рекурсивной. Объем times находится вне внутренней анонимной функции. Когда выполняется более близкое название --times, с областью times является функция before.

 Смежные вопросы

  • Нет связанных вопросов^_^