Объявление функции и объявление переменной otomatis berpindah («поднятый») secara tak kasat mata ke posisi paling atas di dalam scope yang melakukan deklarasi oleh intepreter Javascript.
Переменная
Переменная по умолчанию Secara по умолчанию используется для определения ошибки, а также для ReferenceError.
function my_function() { console.log(aloha); // => throws a ReferenceError }
Saat переменная telah di-deklarasikan.
function my_function() { console.log(aloha === undefined); // => true var aloha = 1; }
Kode diatas diintepretasikan oleh Javascript menjadi seperti dibawah ini.
function my_function() { var aloha; console.log(aloha === undefined); // => true aloha = 1; }
Berbeda dengan deklarasi Variable dengan var, let dan const memiliki konsep Временная мертвая зона (TDZ).
Dengan menggunakan let, deklarasi ulang akan menyebabkan TypeError.
if (aloha) { let foo; let foo; // TypeError thrown. } switch (aloha) { case 0: let foo; break; case 1: let foo; // TypeError for redeclaration. break; }
Melakukan ссылка terhadap переменная didalam suatu блокирует переменную sebelum di-deklarasi akan menyebabkan ReferenceError. Hal ini dikarenakan переменная berada dalam «временная мертвая зона» hingga deklarasi переменная diproses.
// error function my_function() { console.log(foo); // ReferenceError let foo = 2; } // error function example() { console.log(my_const); // => throws a ReferenceError console.log(typeof my_const); // => throws a ReferenceError const my_const = true; }
Функция
Perlu diketahui, Javascript с использованием выражения функции и объявления функции.
// anonymous function expression var my_var = function() {/* do something */}; // named function expression var example = function aloha() {/* do something */}; // function declaration function example() {/* do something */}
Выражение анонимной функции melakukan «подъем» terhadap nama переменная saja, tidak dengan isinya.
function my_function() { console.log(my_anonymous); // => undefined my_anonymous(); // => TypeError anonymous is not a function var my_anonymous = function () { console.log(‘anonymous function expression’); }; }
Выражение именованной функции melakukan «подъем» terhadap nama переменная saja, tidak dengan nama функция ataupun тело дари функция.
function my_function() { console.log(named); // => undefined named(); // => TypeError named is not a function example(); // => ReferenceError example is not defined var named = function example() { console.log(‘Aloha’); }; } // ketika nama variable sama dengan nama function // hasilnya sama function my_function() { console.log(named); // => undefined named(); // => TypeError named is not a function var named = function named() { console.log(‘named’); } }
Декларация функции melakukan «подъемник» baik nama ataupun тело дари функция.
function my_function() { example(); // => Flying function example() { console.log('Aloha'); } }
Lebih lanjut mengenai hosting dapat dilihat tulisan Javascript Scoping & Hoisting.