JavaScriptの作用領域と語法の分析を簡単に述べます.
2684 ワード
スコープ&スコープチェーン
JSでは、スコープは関数によって分類され、関数のスコープは定義段階で決定された.の最外層関数と最外層で定義された変数は、グローバルスコープ を有する.宣言されていません.直接付与された変数は、グローバルスコープ を有しています.関数内部で定義された変数は、局所作用領域 を有する.はまた、すべてのwindowオブジェクトの属性と方法が大域的な作用領域を持っているので、 関数ネストが発生するとドメインチェーンが発生します.インタプリタは変数を検索する時、作用ドメインチェーンによって、内から外まで探します.見つけたら止まって、異常を見つけられません.
AOオブジェクト&品詞分析
JSコードの運行は二つの段階に分けられます.まず品詞分析を行ってから実行します.
一つの関数が呼び出された瞬間に、アクティブなオブジェクトAOが生成され、そのオブジェクトに属性を塗りつぶします.
語法分析は作用範囲チェーンによって、外から中まで分析を行い、三つのステップに分けます.分析モザイク/実参 は、変数宣言を解析する(なお、変数の値は実行時に決定される) .分析関数宣言 次の例を通して説明する. bar関数を呼び出した瞬間、AO を生成する.分析モザイク/実参: 関数宣言時のイメージパラメータは、AOの属性として、デフォルト値undefined、すなわちAO.age=undefined である.は、参加5を受信し、AO.age属性に値を割り当て、すなわちAO.age=5 を与える.
変数宣言の解析: AOがまだこの属性がない場合、追加する.もしあるならば(再声明に相当します)、いかなる操作を実行しないで、もとの値は消えてなくなることはできません. 第3行は、ステートメント 第4行、ステートメント を追加します.
分析関数宣言: AOがまだこの属性がない場合、追加する.もしあるならば、直接覆います. 第7行は、 になる.
実行プロセス: が第2行 が第3行 を割り当てます.が第4行 を割り当てます.が第5行 です.は、7行目の が第11行を実行し、 . foo関数は100 に戻る.
JSでは、スコープは関数によって分類され、関数のスコープは定義段階で決定された.
alert()
とwindow.alert()
を呼び出しても効果は同じです.(windowオブジェクトの詳細方法は、JavaScript基礎3を参照)AOオブジェクト&品詞分析
JSコードの運行は二つの段階に分けられます.まず品詞分析を行ってから実行します.
一つの関数が呼び出された瞬間に、アクティブなオブジェクトAOが生成され、そのオブジェクトに属性を塗りつぶします.
語法分析は作用範囲チェーンによって、外から中まで分析を行い、三つのステップに分けます.
function bar(age) {
console.log(age);
var age = 99;
var sex= 'male';
console.log(age);
function age() {
alert(123)
}
console.log(age);
return 100;
}
bar(5);
/*
ƒ age() { alert(123) }
99
99
100 -
*/
説明:var age
を発見し、AO.ageが既に存在していると判断し、いかなる処理も行わない.var sex
を見つけて、AO.sex=undefined function age() {...}
の声明を見つけると、元のAO.age=5をカバーし、AO.age=function age(){}console.log(age)
を実行すると、現在のAO.age=function age(){……——出力関数age = 99
を実行するとき、AO.ageに対して99 sex= 'male'
を実行すると、AO.sexに対してmale console.log(age)
を実行する場合、AO.age=99は出力99 function age() {...}
関数宣言は、語法分析段階が完了しているので、動作しないことに注意してください.console.log(age)
が実行されると、AO.ageはまだ99である.出力99