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, undefined
przypisywana 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 var
jest podnoszony i let
i const
nie 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 undefined
faktu, ż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 greet
i 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 let
sł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 let
zmienną 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 greet
jest 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 var
został 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ć let
niż var
.