事前分析とは何ですか?コンセプト: 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 をインストールする方法
この効果と同様に、方法も非常に簡単です。ヘッダーに次のように記述します: <link rel=...
目次1. クロージャとは何ですか? 1.2 クロージャのメモ化: 関数は定義された環境を記憶する1....
ソフトウェアのグリーンバージョンとインストールバージョンの違いは何ですか?通常、ファイルのインストー...
目次1. MySQL論理アーキテクチャの概要2. コネクタクエリキャッシュ4. パーサー5. オプテ...
序文正直に言うと、最近とても混乱していると感じています。テクノロジーと人生について。また、将来の発展...
目次0x01 ドライバーモジュールのロードに失敗しました0x02 ソリューション要約する0x01 ド...
mysql5.7.17無料インストールバージョンのインストールに関する最近の経験1.ダウンロードして...
現在、Redis とコンテナについて学習中なので、Docker を使用して Redis マスタースレ...
前回の記事では、次のことを紹介しました。 MySQL8.0.20 インストール チュートリアルとイン...
目次論理階層化異なる地域から事業を分離するこれを実行する利点このようなシナリオにどう対処するか最適化...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
NFSが提供するサービスマウント: サーバー上で /usr/sbin/rpc.mountd サーボ ...
最近、社内に Hadoop テスト クラスターを構築したいので、docker を使用して Hadoo...
1いくつかの一般的な文字セットMySQL で最も一般的な文字セットには、ASCII 文字セット、ラテ...
誰もがこんな気持ちになったことがあると思います。30 秒の広告が入った動画を見ると、とても不快に感じ...