事前分析とは何ですか?コンセプト: JS コードが上から下まで実行される前に、ブラウザはまずすべての変数宣言を解析します。この段階は事前解析と呼ばれます。 詳しい説明 スコープ内で var および関数宣言を探し (匿名関数には関数宣言がないため、ホイストされません)、それらを事前に宣言し、代入操作をそのままにして、コードを上から下へ実行します。これは事前分析プロセスです。 変数と関数の準備の違い事前解析中に、 注意: 匿名関数には関数宣言がないため、昇格されません。 var 変数の繰り返し宣言var が繰り返し宣言された場合: すでに存在する場合、コンパイラは 存在しない場合は、アプリケーション ドメイン チェーンに沿って上方向に検索します。 見つからない場合、変数はこのスコープ内で宣言されます。 変数と関数の昇格の優先順位要約: 関数の昇格は変数の昇格よりも優先順位が高く、同じ名前の変数が宣言されたときには上書きされませんが、変数に値が割り当てられた後は上書きされます。 以下のコンテンツは以下から転載したものです: https://blog.csdn.net/caoyafeicyf/article/details/53172532 関数の優先度が変数の優先度よりも高い理由を詳しく見るブラウザの事前解析プロセス 小さな質問から始めましょう。 var foo; 関数 foo(){} コンソールにログ出力します。 結果は関数本体の 結果は関数本体でもある
関数宣言の優先度は変数宣言の優先度よりも高いと言う人が多いです。 それで、なぜでしょうか?これはブラウザの事前解析から始まります。 事前分析プロセス事前に解析されたキーワードを検索するvarキーワードを探す 関数キーワードを見つける 事前解析を実行するまず、var キーワードを使用して識別子を宣言し、これらの識別子を定義します。識別子が定義された後は、この識別子を使用するときにエラーは報告されません。ただし、値が割り当てられていないため、その値は未定義です。 これまでのところ、識別子は関数への参照を保持しています。 注目すべきいくつかの詳細
事前解析の原則を読んだ後、この記事の冒頭の 2 つの質問に戻り、事前解析プロセスを分析し、関数の優先度が変数の優先度よりも高い理由を詳しく理解しましょう。私に従ってください まずは最初のものを見てみましょう var foo; 関数 foo(){} コンソールにログ出力します。 事前分析プロセスは次のとおりです。 var foo;<---- 変数宣言内のvar var foo;<----関数宣言から抽出されたvar foo = function () {} <----関数宣言の抽出された割り当て console.log(foo); 2番目を見てみましょう 関数 foo(){} var foo; コンソールにログ出力します。 事前分析プロセスは次のとおりです。 var foo;<---- 変数宣言内のvar var foo;<----関数宣言から抽出されたvar foo = function () {} <----関数宣言の抽出された割り当て console.log(foo) 2つを比べてみて、何に気づきましたか?事前解析プロセスは同じであることが判明しており、これが関数が変数よりも優先される理由です。 上記の内容を理解したら、次に別の質問があります。 var a = 1; 関数a(){} コンソールにログ出力します。 ブラウザはどのように解析するのでしょうか?私の考えの流れを追ってみましょう: 1. パーサーは最初に var キーワードを検索し、最初の行でそれを見つけて先頭に抽出します。 パーサーによって処理されるコード プロセスは次のとおりです。 var a;<---- 変数宣言内のvar var a;<----関数宣言から抽出されたvar a=function (){<----関数宣言は代入 a=1; を抽出します。 コンソールにログ出力します。 以上が、Web面接におけるJS事前解析と変数プロモーションの違いについての詳しい内容です。JS事前解析と変数プロモーションの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: シェル スクリプトを使用してワンクリックで MySQL 5.7.29 をインストールする方法
序文この記事では主に、curl を介してフォーム送信ログインを実装する方法について説明します。単一の...
序文PC サーバーは今日まで発展を続け、パフォーマンスにおいて大きな進歩を遂げてきました。 64ビッ...
目次前の単語同期と非同期前菜プレートを追加マクロタスク マイクロタスク約束しましょうタイマーを追加す...
序文MySQL は MySQL 5.6 からマルチスレッド レプリケーションをサポートしていますが、...
目次1. 問題の説明2. 問題解決1. 問題の説明Vue プロジェクトを開発する場合、作成時に誤って...
目次トランザクション分離レベルファントムリーディングとは何ですか?ファントムリードを排除する方法要約...
FOUC は Flash of Unstyled Content の略で、FOUC と略されます。簡...
<!--[lte IE 6の場合]> <![endif]--> IE6以下で...
CSS オーバーフローのメカニズムを詳細に学ぶ必要があるのはなぜですか?実際の開発プロセスでは、コン...
並べ替えクエリ (order by)電子商取引の場合: 今日完了したすべての注文を表示し、取引金額に...
1. nginxソースディレクトリに新しいrtmpディレクトリを作成し、git clone http...
1. 新旧ドメイン名のジャンプ適用シナリオ: ドメイン名ベースのリダイレクト。会社の古いドメイン名は...
この記事の例では、両端キューを実装するためのJavaScriptの具体的なコードを参考までに共有して...
この記事の例では、ログインページを実装するためのlayuiの具体的なコードを参考までに共有しています...
目次主に使用されるPostmanの機能データの暗号化と復号化さまざまなパラメータ設定実際に送信された...