Auf www.w3schools.com/js/js_function_closures.asp gibt es ein einfaches Beispiel eines Zählers in einem Verschluss, und soweit ich das beurteilen kann, ein IIFE:JavaScript Zähler mit Verschluss und IIFE
var add = (function() {
var counter = 0;
console.log(counter);
return function() {return counter += 1;}
})();
add();
add();
add();
// the counter is now 3
Aber nach stundenlangem Lesen von Scope, Closures und IIFEs, nicht zum ersten Mal, und mit Blick auf andere einfache Beispiele, verstehe ich immer noch nicht, warum die Zeile var counter = 0;
nur einmal ausgeführt wird. Das Konsolenprotokoll, das ich direkt nach dieser Zeile hinzugefügt habe, gibt nie etwas aus, als ob es nie aufgerufen würde.
Warum wird der Zähler bei jedem Aufruf von add() nicht auf 0 zurückgesetzt? Welche Konzepte verstehe ich falsch? Danke für Ihre Hilfe.
Die Funktion wird sofort aufgerufen, so dass die 'counter' Initialisierung nur einmal erfolgt. Nun ist 'add' die zurückgegebene Funktion, die nur' counter' erhöht. – Li357
'var add' verweist nicht auf die äußere Funktion, die nach dem' = 'steht; es bezieht sich auf den, der von 'return function() {...}' zurückgegeben wird, also ist es derjenige, den Sie aufrufen, wenn Sie 'add()' eingeben. –
Die 'console.log' Zeile * gibt * für mich vor dem ersten' add() 'Aufruf '0' aus? – Bergi