function add() {
var counter = 0;
counter += 1;
return counter
}
Warum wird die Zählervariable nach der ersten Iteration nicht inkrementiert? Ausgabe ist immer 1
.Ist die Funktionsumfangsvariable nicht beschreibbar
function add() {
var counter = 0;
counter += 1;
return counter
}
Warum wird die Zählervariable nach der ersten Iteration nicht inkrementiert? Ausgabe ist immer 1
.Ist die Funktionsumfangsvariable nicht beschreibbar
Die Funktion add
gibt die Variable counter
zurück, die in der Funktion add
definiert ist. Der Gültigkeitsbereich der Variablen counter
ist lokal zu funktionieren, was bedeutet, dass bei jedem Aufruf der Funktion eine neue Variable counter
erstellt und dann auf Null initialisiert und dann der Zähler inkrementiert wird.
Wenn Sie nach einer Zählerimplementierung suchen, müssen Sie immer dieselbe counter
Variable referenzieren und diese Variable erhöhen. Dies kann durch Verwendung von Closure implementiert werden.
Beispiel: Im folgenden Beispiel gibt es 2 Funktionen, 1 innerhalb des anderen. Die innere Funktion behält einen Verweis auf die äußere Funktion Umgebung bei, die in diesem Fall die Variable counter
enthält. Selbst nachdem die Steuerung die Funktion add verlässt, behält die innere Funktion einen Verweis auf die Variable counter
bei.
var add = (function(){
var counter = 0;
return function(){
return ++counter;
}
})();
document
.querySelector('#btn')
.addEventListener('click', function(){
document.querySelector('#output').textContent = add();
});
<div id="output">0</div>
<button id="btn">Increment</button>
... oder initialisieren die Variable außerhalb der Funktion ... –
@ JeremyThille Was ist eine Schließung, wie Agalo sagte. Ein Abschluss verwendet Variablen, die in einem übergeordneten Bereich deklariert sind. –
'var-Zähler; Funktion add() {Zähler + = 1; return counter;} 'und' (function() {var counter = 0; Rückgabefunktion add() {counter + = 1; return counter;};}()) – Shilly
Sie können den Zähler eine globale Variable machen und dann die Add-Funktion aufrufen:
function add(){
counter = counter + 1;
}
Dies ist eine Scoping-Ausgabe. Ändern Sie ihn auf
let counter = 0;
function add() {
counter += 1;
return counter
}
Oder wenn Sie in der Lage sein wollen, zu tun() hinzufügen, verwenden Sie eine verschachtelte Funktion
function adder() {
let counter = 0;
return function plus() {
return counter += 1;
};
}
let add = adder();
console.log(add());
console.log(add());
console.log(add());
Weil Sie es bei 0 jedes Mal initialisiert werden ... Der Code macht genau das, was Sie denke, es tut. –
Sie deklarieren eine neue 'counter' Variable und setzen sie immer auf 0. Jedes Mal, wenn Sie diese Funktion aufrufen, wird sie immer auf 0 zurückgesetzt und um 1 erhöht, dann wird 1 –
zurückgegeben, warum der neue Status des Variablenzählers nicht gespeichert wird nach re Zuweisung der Variablen – ak2229