分かりやすいJavaScriptのスコープ(二)
1406 ワード
前の文章に続いて、前の篇の基礎の上で1つの変形をします.
変形します
まず下のデモを見てください.
<span style="font-family:SimSun;font-size:18px;"><script>
var a = 1;
function fn1() {
alert(a);
a = 2;
}
function fn1(a){
alert(a);
a = 2;
}
fn1();
alert(a);
var a = 1;
function fn1(a){
alert(a);
a = 2;
}
fn1();
alert(a);
</script></span>
コード解析上記のコードを見たら、木がもう一つの方向転換をしているような感じがします.これはどこの神聖さですか?分かりません.大丈夫です.ゆっくり分析してください.
前のブログで述べた分析のいくつかの手順に従って分析してみます.
1.何かを探す
ブラウザで解析しておくと、var、functionのものを探して、PKを経由して倉庫の中に置きます.そしてPKのレベルは var——function function(先に来ます)――function(後に来ます).PKを経て、倉庫に置いてあるものは以下の通りです.
2.コードを逐行解読する
JSの前解析を経て、上から下までコードを実行し始め、fn 1()コードを実行すると、奇妙なことが現れました.fn 1()は関数ブロックを呼び出すので、上記の二つの過程を分析します.
なぜaがもう一つ増えましたか?今回の解析では、varの出現は発見されていませんでした.aの前には哈がありません.なぜaが一つ多く出てきましたか?忘れないでください.fn 1(a)を解析する時、その中のaはfn 1(var)に相当します. a)だから問題はここにあります.ここで一つのvarの効果が多く出てきます.
3.ここで解析したコードを実行します.
したがって、alert(a)を実行すると、当初解析したときの値はundefinedであるため、undefinedのウィンドウがイジェクトされる.
実行後の結果は以下の通りです.
次に下を向いて実行します.alert(a)はこの時に覚えたことを知っていますよね.弾いたのはきっと1哈です.
次号に続く