JavaScript Hoisting とは何か
JavaScriptのホイスティングとは、JavaScriptエンジンがコードの実行前に、変数や関数の宣言をスコープ内の上部に実際の宣言位置に関わらず移動させていることです。つまり、コード内で変数や関数の宣言は、どこにいても呼び出すことができ、エラーを発生させません。
ホイストの主な用途は2つある
- 変数の宣言:変数の宣言はスコープの先頭に昇格するが、変数の代入は昇格されない。
- 関数宣言:関数宣言はスコープの先頭に格上げされ、関数の宣言よりも前に呼び出しできる。
このコードは、ホイスティング動作を表す例です。
console.log(x); // undefined
var x = 5;
console.log(y); // ReferenceError: y is not defined
let y = 10;
sayHello(); // "Hello"
function sayHello() {
console.log("Hello");
}
最初の例では、変数xの宣言は一番上に昇格されていますが、代入処理は昇格されていないため、宣言の前にxの表示を行うとundefinedになってしまいます。
2つ目の例では、変数yはletキーワードで宣言され、letはホイスティングされないので、宣言前にyを使用するとReferenceErrorが発生します。
3番目の例では、sayHello関数の宣言は一番上に引き上げているので、宣言の前で関数を呼び出すことができます。