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 出力リダイレクトが有効にならない問題の解決方法
前回の記事では、https を使用したローカルノードサービスアクセスを実装しました。前回の記事の効果...
注意: nginxのバージョンは1.9以上である必要があります。nginxをコンパイルするときに、-...
序文JavaScript を学習した人なら誰でも、さまざまな環境で this がどこを指すかという問...
RocketMQ イメージを検索するには、Docker の hub.docker.com で検索する...
縦型テーブル垂直テーブル分割とは、多数の列を持つテーブルを複数のテーブルに分割することを意味します。...
目次フレーム最高レベルのエラー報告活発なコミュニティとチーム冗談モカ推奨プラグインVue テストライ...
3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...
目次1. 準備2. MySQL暗号化関数方式2.1 MySQL 暗号化2.2 MYSQL 復号化3....
この記事では、ネイティブ JS によって実装された動的読み込みプログレス バーの特殊効果を紹介します...
<!--[lte IE 6の場合]> <![endif]--> IE6以下で...
Vue3.0 がリリースされてからしばらく経ちましたが、勉強を始める必要があります。まず、達成したい...
Object.definePropertyの理解文法:オブジェクト.defineProperty(o...
標準の ab は単一の URI でのストレス テストのみをサポートしており、実際のニーズを満たしてい...
今日、非常に奇妙な状況に遭遇しました。docker イメージを更新した後、docker-compos...
フォーム検証は、フロントエンド開発プロセスで最もよく使用される機能の 1 つです。私の個人的な仕事経...