2016-04-04 12 views
5

läuft Ich lerne ES6, also bitte tragen Sie mich.TypeError: Deklaration von Let Fehler in Firebug-Konsole, wenn ES6-Code

Folgendes ist der Code, der gut läuft, wenn ich einmal auf die Schaltfläche Run starte, aber beim zweiten Treffer zeigt es TypeError: redeclaration of let myArr Fehler.

Lassen Sie mich über dieses seltsame (möglicherweise nicht) Verhalten wissen.

let myArr = [34,45,67,2,67,1,5,90]; 
let evenArr = []; 
let oddArr = []; 
myArr.forEach(x => { 
    if (x % 2 === 0) { 
     evenArr.push(x); 
    } else { 
     oddArr.push(x); 
    } 
}); 

console.log(evenArr); 
console.log(oddArr); 

Fehler -

redelaration of let error

Antwort

7

ES6 does not allow Sie diesen (erneut deklariert einen Block-scoped Variable im gleichen Umfang) zu tun:

let foo; 
let foo; 

Und da die Konsole Hält den Status, bis Sie die Seite neu laden (Sie befinden sich schließlich im Kontext der Seite), beim ersten Mal r Un es definieren Sie myArr, so dass Sie es beim zweiten Lauf nicht neu definieren können.

+0

Ok, aber warum, wenn ich 'let' zu' var' ändere und drücke run still, zeigt es den Fehler an (obwohl es bei der Aktualisierung weggeht) – Nesh

+0

'Let' definierte die Variable innerhalb des Blocks. Es wäre sehr seltsam (und höchstwahrscheinlich nicht beabsichtigt), wenn Sie es in den Funktionsumfang hissen könnten, indem Sie es mit 'var' neu definieren. – ThiefMaster

+1

Ich habe die gleiche Frage. Ich habe deine Antwort gelesen und habe etwas über "Let" recherchiert, aber es fällt mir immer noch schwer, es zu verstehen. Von dem, was Sie gesagt haben, hat er den Fehler bekommen, indem er die Variable mit 'let' definiert und dann in' var' geändert hat. In meinem Fall habe ich jedoch von Anfang an mit 'var' begonnen und trotzdem bekomme ich den gleichen Fehler, obwohl ich 'let' nicht benutze. –