2016-07-30 14 views
1

Ich bekomme einen Fehler bei der Verwendung von Modulmuster (Erweiterung) mit ES6 Let Keyword.Modul Muster Fehler in ES6 (Erweiterung)

Das funktioniert.

var Example = (Example => { 
    Example.name = ""; 
    return Example; 
})(Example || {}); 

console.log(Example); 

Dies nicht.

let Example = (Example => { 
    Example.name = ""; 
    return Example; 
})(Example || {}); 

console.log(Example); 

Ich erhalte diesen Fehler.

Uncaught ReferenceError: Example is not defined

})(Example || {}); 
    ^^^^^^^ 

Antwort

2

Die Antwort wird ziemlich klar, wenn man bedenkt, dass dies:

var x = (j => j)(x) 

..becomes dies:

var x = undefined 
x = (j => j)(x) 

Es erklärt wirklich x als undefinedvor den Ausdruck der Bewertung und Einstellung x zu das Ergebnis.

jedoch let hat diese Eigenschaft nicht - es ist nicht gehoben hat:

let y = (j => j)(y) 

..gets als nur das bewertet.

y nicht existiert, wenn Sie (j => j)(y) tun, so wirft es einen Referenzfehler.

+1

Perfekt. Danke ein paar @towerofnix :) –

1

var Erklärungen sind hoisted, dass der Name „erklärt“, aber undefined bis zugewiesen innerhalb des gesamten Funktionsumfangs betrachtet Bedeutung (als Gegensatz zu blockieren Umfang). Im Gegenteil, ES6 let Deklarationen werden nicht gehisst, so dass die Referenz Example die ReferenceError verursacht, da sie noch nicht deklariert wurde.

+0

Vielen Dank @ patrick-roberts :) –