Ich muss gestehen, dass ich bis heute das Schlüsselwort let unter JavaScript noch nie gehört habe. Wie ich jetzt dazu komme? Ich lerne gerade ein wenig Swift und dort gibt es das Schlüsselwort auch – verhält sich aber komplett anders. Ich bin nur über die JavaScript-Lösung gestolpert, als ich Google danach bemüht hatte.
Aber nun zum eigentlichen Thema: Wie unterscheidet sich var von let? Mit beiden Schlüsselworten kann man neue Variablen deklarieren.
Globale deklaration
Benutzt man diese Schlüsselwörter außerhalb von Funktionen, verhalten sie sich exakt identisch. Beide Zeilen führen hier also zum gleichen Ergebnis:
let testLet = 'klappt'; var testVar = 'alles';
Innerhalb Funktionen
Das wird jetzt etwas verwundern, aber auch hier sind die beiden Schlüsselwörter komplett identisch zu verstehen.
function meineTolleFunktion() { let anotherLetTest = 'beides'; var anotherVartest = 'identisch'; }
Blocks / Blöcke
Hier kommen jetzt die Stärken von let zum tragen. Außerhalb von for-Schleifen ist die Variable auf einmal nicht mehr verfügbar. Für mich auf jeden Fall erstrebenswert und das schönere Verhalten.
function testLet() { for( let i = 0; i < 10; i++ ) { // Nur hier kann i genutzt werden }; // i ist hier NICHT verfügbar }; function testVar() { for( var j = 0; j < 10; j++ ) { // natürlich ist j hier auch verfügbar }; // j IST hier verfügbar };
Ich denke, dass es durch das Beispiel sehr deutlich wird, was es mit dem Schlüsselwort auf sich hat. Total genial finde ich auch das Feature, dass man Variablen extra für einen bestimmten Scope deklarieren kann:
function weiteresFeature() { let( nochEinTest = 'blabla' ) { // nochEinTest kann hier genutzt werden }; // nochEinTest ist hier NICHT verfügbar }
Fazit
Für eine sauberere Programmierung würde ich eigentlich immer die Nutzung von let innerhalb von Blöcken empfehlen. Dann kommt man gar nicht erst in die Verlegenheit, Variablen zu nutzen, welche in einem anderen Scope definiert wurden.Ich kann es eigentlich überhaupt nicht leiden, wenn Variablen auf einmal nach einer Schleife noch verfügbar sind. Das ist einfach unschön und diese zu verwenden hat mit guter Programmierung auch wenig zu tun. Aber leider lässt man ältere Browser damit definitiv auf der Strecke und die Seite ist auf einmal nicht mehr lauffähig.
Gut, für den IE6 optimieren mittlerweile eh die wenigsten (hoffe ich zumindest) – aber für das bisschen an Mehrwert während der Entwicklung, würde ich das Risiko auf mich nehmen und let einfach nie benutzen.