2016-05-09 15 views
2

Ich möchte den Wert von i jedes Mal erhöhen, wenn ich myFunction() aufrufen. Wie Sie sehen können, wird jedes Mal, wenn der Wert i auf 0 initialisiert wird. Also wird das Ergebnis immer Null sein. Wie kann sichergestellt werden, dass i eine lokale Variable bleibt und das Inkrement erhalten? Wie kann dies mit dem Konzept der Schließungen geschehen?Ändern einer lokalen Variablen in Javascript jedes Mal, wenn die Funktion aufgerufen wird

function myFunction(){ 
    var i = 0; 
    console.log(i); 
    i++ 
}; 
myFunction(); 
myFunction(); 
myFunction(); 
myFunction(); // Result must be 3 

Antwort

4

Eine kleine Änderung auf @ Carlo Antwort. Dies hält myFunction im aktuellen Umfang.

var myFunction = (function() { 
    var i = 0; 
    return function(){ 
    console.log(i); 
    i++; 
    }; 
})(); 

Beispiel:

myFunction(); // logs 0 
myFunction(); // logs 1 
myFunction(); // logs 2 
myFunction(); // logs 3 
+0

Kann dies das Konzept der Verschlüsse mit durchgeführt werden.? @ A1rPun –

+0

@VishnuPaspunoor Eigentlich ist 'myFunction' hier schon ein [closure] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures). – A1rPun

3

Kurze Antwort: nehmen Sie die Variable aus dem Bereich.

Die Verwendung einer breiteren Bereichsfunktion verhindert, dass Ihre Variable global wird.

+0

in der Tat, dass es in einem lokalen/tiefen Umfang ist vergraben, ansonsten wird ein Verschluss + 1 –

0

Setzen Sie die Variable im globalen Bereich:

var i = 0; 
function myFunction(){ 
    console.log(i); 
    i++ 
}; 
myFunction(); 
myFunction(); 
myFunction(); 
myFunction(); // Result will be 3 
0

Wie andere vorgeschlagen haben, aus der Funktion des Umfangs der Variable nimmt die Antwort. Eine Alternative besteht darin, die Variable als eine Eigenschaft der Funktion festzulegen.

function myFunction() { 

    if (typeof myFunction.i !== "number") { 
     myFunction.i = 0; 
    } 

    console.log(myFunction.i); 
    myFunction.i += 1; 

} 
0
function myFunction() { 
    console.log(i); 
    myFunction.i++ 
}; 
myFunction.i = 0; 

myFunction(); 
myFunction(); 
myFunction(); 
myFunction(); // Result must be 3 
Verwandte Themen