6215 Stimmen

Was ist der Unterschied zwischen der Verwendung von "let" und "var"?

ECMAScript 6 eingeführt die let Anweisung .

Ich habe gehört, dass man es als eine local Variable, aber ich bin mir immer noch nicht ganz sicher, warum sie sich anders verhält als die var Stichwort.

Was sind die Unterschiede? Wann sollte let verwendet werden anstelle von var ?

133 Stimmen

ECMAScript ist der Standard und let ist enthalten in der Entwurf der 6. Auflage und wird höchstwahrscheinlich in der endgültigen Spezifikation enthalten sein.

12 Stimmen

Véase kangax.github.io/es5-compat-table/es6 für eine aktuelle Unterstützungsmatrix der ES6-Funktionen (einschließlich let). Zum Zeitpunkt der Erstellung dieses Artikels unterstützen Firefox, Chrome und IE11 diese Funktion (obwohl ich glaube, dass die Implementierung von FF nicht ganz Standard ist).

37 Stimmen

Die längste Zeit wusste ich nicht, dass Variablen in einer for-Schleife auf die Funktion, in die sie eingeschlossen war, skaliert wurden. Ich erinnere mich, dass ich dies zum ersten Mal herausfand und dachte, es sei sehr dumm. Jetzt weiß ich allerdings, wie die beiden aus unterschiedlichen Gründen verwendet werden können und dass man in manchen Fällen eine Variable in einer for-Schleife verwenden möchte, ohne dass sie auf den Block skaliert ist.

3voto

swaraj patil Punkte 211

Jetzt denke ich, dass es eine bessere Zuordnung von Variablen zu einem Block von Anweisungen mit let :

function printnums()
{
    // i is not accessible here
    for(let i = 0; i <10; i+=)
    {
       console.log(i);
    }
    // i is not accessible here

    // j is accessible here
    for(var j = 0; j <10; j++)
    {
       console.log(j);
    }
    // j is accessible here
}

Ich denke, dass die Leute anfangen werden, let hier zu verwenden, so dass sie in JavaScript ein ähnliches Scoping haben werden wie in anderen Sprachen, Java, C#, usw.

Menschen mit nicht ein klares Verständnis über Scoping in JavaScript verwendet, um den Fehler früher zu machen.

Das Heben wird nicht unterstützt durch let .

Mit diesem Ansatz werden in JavaScript vorhandene Fehler beseitigt.

Siehe ES6 im Detail: let und const um sie besser zu verstehen.

2voto

anandharshan Punkte 5245

In diesem Artikel wird der Unterschied zwischen var, let und const klar definiert

const ist ein Signal, dass die Kennung nicht neu vergeben wird.

let ist ein Signal, dass die Variable neu zugewiesen werden kann, wie z. B. ein Zähler in einer Schleife, oder ein Wertetausch in einem Algorithmus. Es signalisiert auch dass die Variable nur in dem Block verwendet wird, in dem sie definiert ist, was nicht immer die gesamte enthaltende Funktion ist.

var ist jetzt das schwächste verfügbare Signal, wenn Sie eine Variable definieren in JavaScript definieren. Die Variable kann, muss aber nicht neu zugewiesen werden, und die Variable kann für eine ganze Funktion verwendet werden oder auch nicht für einen Block oder eine Schleife verwendet werden.

https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75#.esmkpbg9b

2voto

Rafael Herscovici Punkte 15633

Ich denke, die Begriffe und die meisten Beispiele sind ein wenig überwältigend, Das Hauptproblem, das ich persönlich mit dem Unterschied hatte, ist das Verständnis, was ein "Block" ist. Irgendwann habe ich begriffen, dass ein Block jede geschweifte Klammer ist, außer für IF Erklärung. eine öffnende Klammer { einer Funktion oder Schleife wird ein neuer Block definiert, alles, was mit let sind nach dem Schließen der Klammer nicht mehr verfügbar. } der gleichen Sache (Funktion oder Schleife); In diesem Sinne war es einfacher zu verstehen:

let msg = "Hello World";

function doWork() { // msg will be available since it was defined above this opening bracket!
  let friends = 0;
  console.log(msg);

  // with VAR though:
  for (var iCount2 = 0; iCount2 < 5; iCount2++) {} // iCount2 will be available after this closing bracket!
  console.log(iCount2);

    for (let iCount1 = 0; iCount1 < 5; iCount1++) {} // iCount1 will not be available behind this closing bracket, it will return undefined
  console.log(iCount1);

} // friends will no be available after this closing bracket!
doWork();
console.log(friends);

-1voto

Mile Mijatović Punkte 2467
const name = 'Max';
let age = 33;
var hasHobbies = true;

name = 'Maximilian';
age = 34;
hasHobbies = false;

const summarizeUser = (userName, userAge, userHasHobby) => {
    return (
    'Name is ' +
    userName +
    ', age is ' +
    userAge +
    ' and the user has hobbies: ' +
    userHasHobby
    );
}

console.log(summarizeUser(name, age, hasHobbies));

Wie Sie anhand des obigen Codes sehen können, werden Sie beim Versuch, die const Variable, werden Sie einen Fehler erhalten :

Versuch, 'name' zu überschreiben, der eine Konstante ist.

oder

TypFehler: Ungültige Zuweisung an die Konstante 'name'.

aber werfen Sie einen Blick auf die let variabel.

Zunächst erklären wir let age = 33 und später einen anderen Wert zuweisen age = 34; was in Ordnung ist; wir haben keine Fehler, wenn wir versuchen, die let variabel

0 Stimmen

Der Code sollte in SO-Beiträgen ausgeschrieben und nicht über einen Screenshot weitergegeben werden.

-2voto

Nurlan Punkte 107

Überprüfen Sie diesen Link in MDN

let x = 1;

if (x === 1) {
let x = 2;

console.log(x);
// expected output: 2
}

console.log(x);
// expected output: 1

0 Stimmen

Es wäre zusätzlich hilfreich, in Worten zu erklären, was let macht, obwohl dies eine Duplikation einer anderen Antwort hier wäre

0 Stimmen

Was er zu sagen versucht, ist, dass die let außerhalb der if definiert die Variable x=1 . En if -Anweisung auslösen wird (da x===1 is true . Jetzt kommt der schwierige Teil, der auch der Hauptgrund dafür ist, dass Sie den Überblick behalten müssen let gegen var . Im Inneren der if versucht er, die x=2 die in der console.log(x) druckt 2, JEDOCH, x "auf der Außenseite" des Wenn hat immer noch den Wert 1 so dass die anderen console.log(x) ergibt 1, da der Wert von x "global" ist immer noch 1 . In der Antwort wird dies nicht erklärt, so dass sie meiner Meinung nach nicht als gute Antwort gelten sollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X