標籤:java io strong for ar 問題 cti div
我們都明白局部變數的優先順序大於全域變數,或者說內圍範圍的變數的優先順序比外圍的高。如果在當前範圍找不到此變數時,它就往外圍的範圍找。不過,在這之前,有一個值得注意的問題就是:究竟當前範圍有沒有這個變數。像javascript這樣的解釋型語言,基本分為兩個階段,編譯期(下面為符合大多數語言的稱呼習慣,改叫先行編譯)與運行期。在先行編譯階段,它是用函數來劃分範圍,然後逐層為var變數與函數定義分配記憶體空間,再然後對var變數進行特殊處理,統統賦初始值為undefined。
var
a=100;
var
b=
true
;
function
test(){
alert(a);
alert(b);
b=
false
;
alert(b);
var
a=200;
alert(a);
}
test();第一次a輸出的是undefine,第一次b輸出的是true;第二次a的輸出的是200,第二次是b是false;把上面的例子修改一下
var
a=100;
var
b=
true
;
function
test(){
alert(a);
alert(b);
var b=
false
;
alert(b);
var
a=200;
alert(a);
}
test();第一次a輸出的是undefine,第一次b輸出的是undefine;第二次a的輸出的是200,第二次是b是false;
javascript的範圍是指變數和函數可以訪問的範圍,分為局部範圍和全域範圍,這個和C語言是類似的,但是不同點是javascript的範圍沒有塊級範圍,不像C語言的{}可以表示一個塊級的範圍,javascript只有函數範圍,在函數內部聲明的變數只能在函數體和子函數可以訪問,這個函數的外部不能訪
//沒有塊級範圍
if(true){
var n=1;
}
alert(n);//1
for(var i=0;i<10;i++){
}
alert(i);//10
上面的例子要是在C語言或者java中n和i會在{}語言執行完之後銷毀,在javascript中可以看到,它們並沒有銷毀,說明並沒有塊級範圍。