JSランニング三部作js実行コードは3つのステップに分かれています
JavaScript コードが実行されると、最初に構文解析を実行してコード内に低レベルのエラーがあるかどうかを確認し、次にプリコンパイルして内部ロジックを整理し、最後にコードを 1 行ずつ実行し始めます。 構文解析コードを実行する前に、システムはコード全体をスキャンして、中括弧の欠落などの低レベルの構文エラーがないか確認します。 プリコンパイルコンパイル前の序章プリコンパイルは関数が実行される直前に行われます。変数は宣言されずに値が割り当てられ、変数はグローバルオブジェクトによって所有されます。 宣言されたすべてのグローバル変数はウィンドウのプロパティです
プリコンパイルの4つのステップ
例を挙げて説明しましょう。また、先に進む前に自分で答えを出すこともできます。 関数fn(a) { コンソールにログ出力します。 var a = 123; コンソールにログ出力します。 関数a() {} コンソールにログ出力します。 var b = function() {}; コンソールログ(b); 関数 d() {} コンソールログ(d) } 関数(1) 最初のステップは、AO (アクティベーション オブジェクト) オブジェクトを作成することです。 2 番目のステップは、仮パラメータと変数宣言を見つけ、変数名と仮パラメータ名を undefined の値を持つ AO 属性名として使用することです。 { a: 未定義、 b: 未定義、 } 3番目のステップは、実際のパラメータと形式パラメータを統合することです。 { a: 1、 b: 未定義、 } ステップ4: 関数宣言を見つけて関数本体に値を割り当てる { a: 関数 a() {}, b: 未定義、 d: 関数 d() {} } したがって関数fnが実行される直前のa、b、dの値は上記のようになります。 したがって、fn(1)を実行した結果は
グローバルスコープでは、プリコンパイルのプロセスが若干異なります。
解釈コードを1行ずつ実行する 練習問題ここにいくつかの例がありますので、興味があればご覧ください。 関数テスト(a, b) { コンソールにログ出力します。 コンソールログ(b); var b = 234; コンソールログ(b); a = 123; コンソールにログ出力します。 関数a() {} var a; 234; var b = function() {}; コンソールにログ出力します。 コンソールログ(b); } テスト(1); グローバル = 100; 関数fn() { console.log(グローバル); グローバル = 200; console.log(グローバル); var グローバル = 300; } 関数fn(); var グローバル; 関数テスト() { コンソールログ(b); もし(a){ var b = 100; } 234; コンソールログ(c); } var a; テスト(); a = 10; コンソールログ(c); 要約するほとんどの場合、プリコンパイル プロセスを処理するために次の方法を使用します。
複雑な状況に遭遇した場合、問題を解決するには最も原始的な方法しか使えません。 JavaScript プリコンパイルの理解(まとめ)に関する記事はこれで終わりです。JavaScript プリコンパイルに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQLでヘッダー付きのCSVファイルをエクスポートする方法
>>: Linux で crontab 出力リダイレクトが有効にならない問題の解決方法
この記事では、簡単なドラッグ効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...
最近、プロジェクトでは kubernetes (以下、k8s と表記、k と s の間には 8 つの...
目次序文デザイン成し遂げるまとめ序文最近は、いつも延々とスワイプしています。 Weibo をチェック...
目次1. BOMの紹介1. JavaScriptは3つの部分から構成される2.ウィンドウオブジェクト...
目次1. パーティクルエフェクト2. シーンを読み込む3. さまざまな粒子効果の実現エンディング: ...
目次1. 解凍コマンド1.1 構文1.2 オプション2. 例1. 解凍コマンドunzip コマンドは...
背景レプリケーションはデータの完全なコピーです。レプリケーションが必要な理由として、まず思い浮かぶの...
序文場合によっては、第 1 正規形設計パターンに従わないビジネス テーブルに遭遇することがあります。...
<本文> <div id="ルート"> <h1 ...
MySQL 高度な SQL ステートメント kgc を使用します。 テーブルlocation(Reg...
目次1. 前に書く2. ポップアップウィンドウを実装するためのオーバーレイ2.1 vueページのad...
序文最近、古いプロジェクトから残ったいくつかの SQL 最適化の問題に対処するのに忙しくしています。...
MYSQL5.7.17 が MAC で接続できない問題。SQLBench_community 6.3...
目次簡単な説明: 1. 取引の4つの特徴2. 複数の同時トランザクションによって発生する問題3. ト...
目次マップ状態マップゲッターマップミューテーションマップアクション複数のモジュールマップ状態 ...