Grałem z jakimś kodem i wpadłem na sytuację, w której nie mogłem zidentyfikować, dlaczego "let" zachowuje się tak, jak robi.Problem z let keyword
Na poniższym bloku kodu:
var x = 20; // global scope
function f() {
let x = x || 30;
}
f(); // VM3426:1 Uncaught ReferenceError: x is not defined(…)
pojawia się błąd 'x nie jest zdefiniowana' w wykonaniu f(). Rozumiem, że zmienne "let" nie są podnoszone, ale skoro "x" ma kopię globalną, dlaczego linia wewnątrz funkcji "f" nie przyjmuje wartości globalnej zamiast rzucania błędu? Czy "pozwól" ustawić zmienną na niezadeklarowaną (zamiast "niezdefiniowaną" z var ze względu na podnoszenie) na początku funkcji? Czy istnieje sposób uzyskania globalnej kopii "x" w ramach funkcji?
Możliwy duplikat [ „niech” słowa kluczowego vs „var” słowo kluczowe w JavaScript] (http://stackoverflow.com/questions/762011/let-keyword-vs-var-keyword-in-javascript) – ozil
Deklaracja lokalnego 'x' jest w cieniu globalnego, ale jak Ty przypisywanie wartości na podstawie istniejącego 'x', ca kompilatora Nigdzie nie znajduj jednego, ponieważ ten jest zacieniony, a drugi nie jest jeszcze zadeklarowany. –