事前分析とは何ですか?コンセプト: 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 をインストールする方法
①. エイリアス(CNAME)レコードの使用方法:前回の投稿のドメイン名解決では、A レコードの解...
指定したサイズより大きいファイルを検索するには、find コマンドを使用します。 検索 / -typ...
最近プロジェクトが中断され、RageFrame の研究は一時的に終了しました。この記事では、シングル...
目次1. 概要1.1 プロトタイプとは何ですか? 1.2 プロトタイプを入手する2. プロトタイプの...
最近 redis を使っていて、とても便利だと感じているのですが、インメモリ データベースを選択する...
序文:データベースの運用や保守の際には、リンクの総数がいくつあるか、アクティブなリンクがいくつあるか...
序文クエリの最適化は一夜にして達成できるものではありません。対応するツールの使い方を学び、他の人の経...
この記事では、フォームデータの非同期送信を実装するためのJavaScriptの具体的なコードを参考ま...
justify-content:space-betweenレイアウトを使用する場合、要素の最後の行に...
doctype もその 1 つです。 <!DOCTYPE HTML PUBLIC "...
1. 概要ユーザーは、アクセスする Web アプリケーションがインタラクティブでスムーズに実行される...
1. 4つの起動方法: 1.mysqld MySQL サーバーを起動します: ./mysqld --...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
面接には必需品、仕事でも必ず使います。うーん、誰でも分かるでしょう。これ以上何も言わずに、要約とレン...
目次序文1. 文字列を分割する2. JSONのフォーマットと解析3. 複数行の文字列と埋め込み式4....