ECMAScript 6 wprowadził instrukcję let. Słyszałem, że opisywana jest jako zmienna „lokalna”, ale wciąż nie jestem pewien, jak zachowuje się inaczej niż słowo kluczowe var. Jakie są różnice? Kiedy powinno się używać let w stosunku do var?
1 odpowiedź
Różnica polega na określeniu zakresu. var ma zasięg do najbliższego bloku funkcyjnego, a let jest ograniczony do najbliższego bloku obejmującego, który może być mniejszy niż blok funkcyjny. Oba są globalne, jeśli poza blokiem.
Ponadto zmienne zadeklarowane z let nie są dostępne, zanim nie zostaną zadeklarowane w otaczającym ich bloku. Jak widać w wersji demonstracyjnej, spowoduje to wyjątek ReferenceError. Globalny: Są bardzo podobne, gdy są używane w ten sposób poza blokiem funkcyjnym.
let me = 'go'; // globalny zasięg
var i = 'able'; // globalny zasięg
Funkcja: Są identyczne, gdy są używane w ten sposób w bloku funkcyjnym.
function ingWithinEstablishedParameters() {
let terOfRecommendation = 'awesome worker!'; //blok funkcyjny
var sityCheerleading = 'go!'; //blok funkcyjny
}
Blok: Oto różnica. let jest widoczny tylko w pętli for (), a var jest widoczny dla całej funkcji.
function allyIlliterate() {
//tuce jest * nie * widoczne tutaj
for( let tuce = 0; tuce < 5; tuce++ ) {
//tuce jest widoczne tylko tutaj
//a dla każdej iteracji pętli istnieje osobna zmienna tuce
}
//tuce jest * nie * widoczne tutaj
}
function byE40() {
//nish * jest * widoczny tutaj
for( var nish = 0; nish < 5; nish++ ) {
//nish jest widoczny dla całej funkcji
}
//nish * jest * widoczny tutaj
}
Deklaracja: Zakładając tryb ścisły, var pozwoli ci ponownie zadeklarować tę samą zmienną w tym samym zakresie. Z drugiej strony, let nie:
'use strict';
let me = 'foo';
let me = 'bar'; // SyntaxError: Identyfikator „me” został już zadeklarowany
'use strict';
var me = 'foo';
var me = 'bar'; // Nie ma problemu, `me` zostaje zastąpione.