Javascript:JSのグローバル変数と局部変数経典事例について!
2456 ワード
var a =1;
function test(){
alert(a);
var a = 2;
alert(a);
}
test();
alert(a);
みんなは結果を当てていくらになりますか?出力1 2 1ですか?
えっと、テストのcaseを彼女に送る前にもそう思っていましたが、テスト出力後……運行結果はundefined 2 1です.その時、何も考えられませんでした.谷先生に聞いてみて、JSについてはよく分かりませんでした.だから、苦しい努力をして、+テストを勉強して、次のようにまとめました.
一、Javascriptの変数のscopeは、方法ブロックによって分類される(すなわち、functionの大括弧のペアである{}で区別される).ぜひ覚えてください.functionブロックです.for、while、ifブロックは役割領域の区分基準ではありません.以下のいくつかの例を見てもいいです.
function test2(){
alert ("before for scope:"+i); // i ( ! )
// i underfined
for(var i=0;i<3;i++){
alert("in for scope:"+i); // i 0、1、2, i 3
}
alert("after for scope:"+i); // i 3, , for scope , i 3
while(true){
var j = 1;
break;
}
alert(j); // j 1, , while scope , j 1
if(true){
var k = 1;
}
alert(k); //k 1, , if scope , k 1
}
test2();
// (function scope ) test2 function scope i、j、k ?
alert(i); //error! , error, i ( , test2 ), , !
alert(" ?"); //
alert(j); //
alert(k); //
二、Javascriptは実行前にスクリプトファイル全体の声明部分を完全に分析し(局所変数を含む)、実変数の作用領域を確定する.どう分かりますか?次の例を見てください.
var a =1;
function test(){
alert(a); //a undefined! a , function scope ( 4 ) ,
// a , Javascript , test() ,
// a . . a , , undefined。
a=4
alert(a); //a 4, ? a !
var a; // a
alert(a); //a 4, 4 a
}
test();
alert(a); //a 1, function scope ,a
三、大域変数と局部変数が重名されると、局部変数のscopeは大域変数のscopeを上書きします.局部変数のscopeを離れると、また大域変数のscopeに戻ります.大域変数が局所変数に遭遇した場合、大域変数はどう使いますか?window.global Varable Nameを使います.
var a =1;
function test(){
alert(window.a); //a 1, a !
var a=2; // a
alert(a); //a 2, a !
}
test();
alert(a); //a 1, function scope ,a