Объявление функции и объявление переменной 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.

Сумма