JavaScriptの役割領域について浅く話す

1360 ワード

分かりやすいようにコードを見ます.
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 aa =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(上巻)」