JavaScript Hoisting (z przykładami)

W tym samouczku dowiesz się o podnoszeniu JavaScript na podstawie przykładów.

Podnoszenie w JavaScript to zachowanie, w którym funkcja lub zmienna może być użyta przed deklaracją. Na przykład,

 // using test before declaring console.log(test); // undefined var test;

Powyższy program działa, a wynik będzie niezdefiniowany. Powyższy program zachowuje się jak

 // using test before declaring var test; console.log(test); // undefined

Ponieważ zmienna test jest tylko zadeklarowana i nie ma wartości, undefinedprzypisywana jest do niej wartość.

Jeśli chcesz dowiedzieć się więcej o zmiennych, odwiedź Zmienne JavaScript.

Uwaga : Podczas podnoszenia, chociaż wydaje się, że deklaracja przesunęła się w górę w programie, w rzeczywistości dzieje się tak, że deklaracje funkcji i zmiennych są dodawane do pamięci podczas fazy kompilacji.

Zmienne podnoszenie

Pod względem zmiennych i stałych, kluczowe varjest podnoszony i leti constnie pozwala podnosić.

Na przykład,

 // program to display value a = 5; console.log(a); var a; // 5

W powyższym przykładzie zmienna a jest używana przed jej zadeklarowaniem. Program działa i wyświetla wyjście 5. Program zachowuje się jak:

 // program to display value var a; a = 5; console.log(a); // 5

Jednak w JavaScript inicjalizacje nie są podnoszone. Na przykład,

 // program to display value console.log(a); var a = 5;

Wynik

 nieokreślony

Powyższy program zachowuje się jak:

 var a; console.log(a); a = 5;

Tylko deklaracja jest przenoszona do pamięci w fazie kompilacji. Stąd wartość zmiennej a wynika z undefinedfaktu, że a jest drukowane bez inicjalizacji.

Ponadto, gdy zmienna jest używana wewnątrz funkcji, zmienna jest podnoszona tylko na początek funkcji. Na przykład,

 // program to display value var a = 4; function greet() ( b = 'hello'; console.log(b); // hello var b; ) greet(); // hello console.log(b);

Wynik

 hello Uncaught ReferenceError: b nie jest zdefiniowana

W powyższym przykładzie zmienna b jest przenoszona na początek funkcji greeti staje się zmienną lokalną. Stąd b jest dostępne tylko wewnątrz funkcji. b nie staje się zmienną globalną.

Aby dowiedzieć się więcej o zmiennych lokalnych i globalnych, odwiedź stronę JavaScript Variable Scope.

Uwaga : W przypadku podnoszenia deklaracja zmiennej jest dostępna tylko dla bezpośredniego zakresu.

Jeśli zmienna jest używana ze letsłowem kluczowym, ta zmienna nie jest podnoszona. Na przykład,

 // program to display value a = 5; console.log(a); let a; // error

Wynik

 Uncaught ReferenceError: Nie można uzyskać dostępu do „a” przed inicjalizacją

Podczas używania letzmienną należy najpierw zadeklarować.

Funkcja podnoszenia

Funkcję można wywołać przed jej zadeklarowaniem. Na przykład,

 // program to print the text greet(); function greet() ( console.log('Hi, there.'); )

Wynik

 Cześć

W powyższym programie funkcja greetjest wywoływana przed jej zadeklarowaniem, a program pokazuje wynik. Wynika to z podnoszenia.

Jednak gdy funkcja jest używana jako wyrażenie , występuje błąd, ponieważ podnoszone są tylko deklaracje. Na przykład;

 // program to print the text greet(); let greet = function() ( console.log('Hi, there.'); )

Wynik

 Uncaught ReferenceError: greet nie jest zdefiniowana

Gdyby varzostał użyty w powyższym programie, błąd wyglądałby tak:

 Uncaught TypeError: greet nie jest funkcją

Uwaga : Generalnie podnoszenie nie jest wykonywane w innych językach programowania, takich jak Python, C, C ++, Java.

Podnoszenie może spowodować niepożądane skutki w programie. Najlepiej jest najpierw zadeklarować zmienne i funkcje przed ich użyciem i unikać podnoszenia.

W przypadku zmiennych lepiej jest użyć letniż var.

Interesujące artykuły...