JavaScriptの役割領域について浅く話す
1360 ワード
分かりやすいようにコードを見ます.
これらを知るためには、作用域が何かを知る必要があります.
作用域は何ですか?簡単に言えば、マシンがコードを再実行する時のコードが存在する環境です.
私たちは、それぞれのかっこが役割領域を形成しています.内部の役割領域を越えて多くのアクセスができます.これはJavaScriptのコードが実行される時に上に訪問します.現在のスコープが訪問対象が見つからない場合、上のスコープに照会し、最終的にグローバルスコープを検索しても、すべての検索ができない場合は、エラーが発生します.
最初のコードに戻ります.
a = 2;
var a;
console.log( a );
得られた結果は何ですか?undefined、ReferenceErr異常、2それとも他ですか?実はここで2を出力します.なぜですか?また見ます.console.log( a );
var a = 2;
結果はなんですか?答えはundefinedですこれらを知るためには、作用域が何かを知る必要があります.
作用域は何ですか?簡単に言えば、マシンがコードを再実行する時のコードが存在する環境です.
var color = "blue";
function changeColor() {
var anotherColor = "red";
function swapColors() {
var tempColor = anotherColor;
anotherColor = color;
color = tempColor;
// color、anotherColor tempColor
}
// color anotherColor, tempColor
swapColor()
}
// color
changeColor()
このコードは三つの実行環境に関連しています.グローバル環境、changeColor()のローカル環境とswapColor()のローカル環境です.つまり作用域です.私たちは、それぞれのかっこが役割領域を形成しています.内部の役割領域を越えて多くのアクセスができます.これはJavaScriptのコードが実行される時に上に訪問します.現在のスコープが訪問対象が見つからない場合、上のスコープに照会し、最終的にグローバルスコープを検索しても、すべての検索ができない場合は、エラーが発生します.
最初のコードに戻ります.
var a = 2
はコードの一部です.JavaScriptはそうではないです.var a
とa =2
JavaScriptは機能領域の先端に申明を移すので、最初のコードはconsolie.log(a)の時に値にアクセスしました.第二のコードはsone.log(a)の時には実際の動作値がなくなりました.結果はundefinedです.ps:es 6はconstとletの二つの説明方式が現れています.この二つの説明はアップグレードされません.a = 2;
let a;
console.log( a ); // Uncaught ReferenceError: a is not defined
参考資料:「JavaScript高級プログラム設計」「知らないJavaScript(上巻)」