JavaScriptでホイスティング?

PHPz
リリース: 2024-07-17 10:40:29
オリジナル
705 人が閲覧しました

Hoisting in javascript ?

「ホイスティングとは、コード実行前のコンパイル段階で、すべての変数と関数の宣言が含まれるスコープの先頭に移動する JavaScript の動作です。」

この定義はどこでも見かけるかもしれませんが、「すべての変数と関数の宣言が物理的にコードの先頭にあるというのは迷信です。」これは真実ではありません!

しかし、代わりに、すべての変数と関数のホイスティングで、コンパイルでコードを実行する前にメモリが割り当てられており、入力した場所に正確に保持されます。

var/let/const と関数がどのようにホイストされるのかを正確に説明します。

ここにいくつかの例があります:

console.log(a) // undefined
console.log(b) // ReferenceError
console.log(c) // ReferenceError

var a = 10;
let b = 20;
const c = 30;
ログイン後にコピー

var で宣言された変数はホイストされ、コンパイル時に var 変数に値が未定義でメモリに割り当てられます。なぜ宣言前に var をコンソールすると unknown になるのですか

const/let で宣言された変数もホイストされますが、 unknown では初期化されません。宣言する前にアクセスすることはできません。そうでない場合は、ReferenceError が返されます。これは、変数が存在しても初期化されていない時間的デッド ゾーンが原因です。

しかし、関数についてはどうでしょうか

それは関数をどのように宣言するかによって決まります。以下を参照してください。

greet1();
greet2();
greet3();
greet4();

//function declaration is full hoisted
function greet1(){
    console.log("greet1");
}

// TypeError: greet2 is not a function
var greet2 = function(){
    console.log("greet2");
}

 // ReferenceError: Cannot access 'greet3' before initialization
let greet3 = function(){
    console.log("greet2");
}

// ReferenceError: Cannot access 'greet4' before initialization
const greet4 = function(){
    console.log("greet2");
}
ログイン後にコピー

従来の関数宣言は完全にホイストされているため、コード全体で呼び出すことができます。

しかし、関数式では、それが宣言される前にそれを行うことはできません。これが、変数を使用して宣言された 3 つの関数でエラーが発生する理由です。したがって、関数式を関数宣言に変更するか、宣言の後に関数を呼び出すかの 2 つのオプションがあります。

以上がJavaScriptでホイスティング?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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