ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript でのホイスティング: 騙される可能性のある単純な概念

JavaScript でのホイスティング: 騙される可能性のある単純な概念

DDD
リリース: 2025-01-04 10:00:34
オリジナル
358 人が閲覧しました

Hoisting in JavaScript: The Simple Concept That Can Trick You

ホイスティングは、JavaScript の面接で最もよく聞かれる質問の 1 つであり、初心者に優しい概念であると考えられています。ただし、その動作は欺瞞的である可能性があり、経験豊富な開発者さえ罠に陥らせる可能性があります。


ホイスティングとは何ですか?

JavaScript におけるホイスティングは、コードの実行前のコンパイル段階で、変数と関数の宣言がそれらを含むスコープ (スクリプトまたは関数) の先頭に移動される動作です。

宣言のみがホイストされ、初期化や代入はホイストされません。

ホイスティングは、変数、関数、クラスに対して異なる動作をします。一つ一つ理解していきましょう。


変数の巻き上げ

var キーワードのホイスティング

  • var を使用して宣言された変数はホイストされますが、初期化はそのまま残ります。
console.log(a); // Output: undefined (declaration hoisted, not initialisation)
var a = 5;
console.log(a); // Output: 5
ログイン後にコピー

let および const キーワードのホイスティング

  • let および const で宣言された変数もホイストされますが、「一時的なデッド ゾーン」のため、宣言前はアクセスできません。
console.log(b); // ReferenceError: Cannot access 'b' before initialisation
console.log(c); // ReferenceError: Cannot access 'c' before initialisation
let b = 10;
const c = 'alphabet';
ログイン後にコピー

機能のホイスト

  • 関数宣言は完全にホイストされています。つまり、関数が定義される前に関数を呼び出すことができます。
greet(); // Output: Hello!
function greet() {
    console.log("Hello!");
}
ログイン後にコピー
  • 関数式 (var、let、または const を使用) は完全にはホイストされていません。変数宣言のみがホイストされ、代入はホイストされません。
sayHello(); // TypeError: sayHello is not a function
var sayHello = function() {
     console.log("Hello!");
};
ログイン後にコピー

クラス引き上げ

  • クラスは関数と同じ方法ではホイストされません。宣言する前にクラスを使用すると、ReferenceError が発生します。
const obj = new MyClass(); // ReferenceError: Cannot access 'MyClass' before initialisation
class MyClass {
    constructor() {
        console.log("Hello from MyClass!");
    }
}
ログイン後にコピー

覚えておくと良いでしょう

  • ホイスティングは、変数または関数が定義されているスコープ内で発生します。関数内で宣言された変数は、その関数のスコープの先頭にホイストされます。

  • let と const の場合、ブロックの先頭から変数の宣言に遭遇するまで、「一時的なデッド ゾーン」が存在します。この期間中に変数にアクセスすると ReferenceError がスローされます。


従うべきいくつかのベストプラクティス

  • 混乱やバグを避けるために、変数と関数はスコープの先頭で宣言してください。

  • 最新の JavaScript では var の使用を避けてください。 let と const を優先します。

  • エラーを避けるために、関数宣言と式の違いを理解します。


追加情報

時間的デッドゾーン(TDZ)とは何ですか?

  • 時間的デッド ゾーン (TDZ) は、変数のスコープの開始からコード内での宣言までの時間です。この期間中に変数にアクセスすると ReferenceError がスローされます。

TDZ はなぜ存在するのでしょうか?

  1. 予測可能な動作
  2. TDZ は、変数が適切に宣言され初期化されるまで変数が使用されないようにします。

  3. 一般的なバグの防止

  4. TDZ がないと、初期化前に変数に未定義または意図しない値が含まれる可能性があり、デバッグが難しい問題が発生します。

  5. 宣言型コードを推奨します

  6. TDZ は使用前に変数を宣言することを要求することで、より明確で構造化されたコードを促進します。

ホイスティングは単純な概念のように思えるかもしれませんが、そのニュアンスは経験豊富な開発者でも不意を突かれる可能性があります。宣言が内部でどのように処理されるかを理解することで、よりクリーンで予測可能なコードを作成し、面接での難しい質問に答えることができます。基本をマスターすることが JavaScript プロになるための第一歩であることを覚えておいてください。コーディングを楽しんでください!

以上がJavaScript でのホイスティング: 騙される可能性のある単純な概念の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート