2016-08-09 41 views
3

Kann mir jemand erklären, wie die _.before Funktion implementiert ist, da ich nicht wirklich verstehe, warum die interne Variable times jeden Funktionsaufruf verfolgt. Sollte es nicht im lokalen Umfang sein und jedes Mal wie normale Funktionen zurückgesetzt werden?underscore.js .before Funktionsimplementierung

-Code für _.before Funktion:

// 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; 
    }; 
    }; 

Danke.

+0

Sie benötigen diese http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – Maxx

Antwort

0

Aufgrund eines Konzepts mit dem Namen closures "merkt" sich die zurückgegebene Funktion in Ihrem Beispiel die Umgebung, in der sie erstellt wurde. In diesem Fall merkt es sich die Argumente times und func, obwohl es zurückgegeben wird.

Lesen Sie mehr über Schließungen: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

0

Der Schlüssel ist func.apply(this, arguments) macht die anonyme Funktion rekursiv. Der Gültigkeitsbereich von times liegt außerhalb der inneren anonymen Funktion. Wenn der Schließer --times aufgerufen wird, wird mit dem Bereich times die before Funktion ausgeführt.