事前分析とは何ですか?コンセプト: 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 をインストールする方法
1. ダウンロード公式サイトからmysql-5.7.19-linux-glibc2.12-x86_6...
ウェブページに慣れていない友人の多くは私と同じように、HTML で要素、タグ、属性がどのように定義さ...
3G の普及により、携帯電話を使ってインターネットにアクセスする人が増えています。モバイル デバイ...
「.zip」形式は、Windows システムでファイルを圧縮するために使用されます。実際、「.zip...
目次1. 自己増分値はどこに保存されますか? 2. 自己価値修正メカニズム3. 自動増分値を変更する...
目次JavaScriptでは、 forループを記述する一般的な方法がいくつかあります。最初の、そして...
目的nextTickの役割といくつかの簡単な使用シナリオを理解する文章その機能は何ですか?遅延コール...
1. 何ですかCSS アニメーションは、CSS を使用して拡張マークアップ言語 (XML) 要素をア...
1. ファイアウォールをオフにし、Tomcatのインストールに必要なソフトウェアパッケージを/opt...
nginx をインストールApple Mac ではインストールに brew を使用します。brew ...
easyui フレームワークのコードは次のとおりです。 css: .ファイルボックス{ フロート:...
1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...
MySql 8.0 対応ドライバパッケージのマッチングMySql データベースをバージョン 8.0 ...
Taobao のウェブページはインポートを使用していますが、多くのウェブサイトはリンクを使用していま...
1. まず、VS2019とMySQLデータベースを準備します。どちらも公式サイトからダウンロードで...