JavaScript作用域之沒有塊級作用域
與C、C++以及JAVA不同,Javscript沒有塊級作用域。函數中聲明的所有變量,無論是在哪裡聲明的,在整個函數中它們都是有定義的。
上例子
例子一、下面代碼中,變量i、j和k和作用域是相同的,它們三個在整個函數中都有定義。
<script>
function test(o){
var i=0;
if(typeof o == "object"){
var j=0;
for(var k=0; k<10; k++){
document.writeln("k="+k);
}
document.writeln("k2="+k);
}
document.writeln("j="+j);
}
test(new String("pppp"));
</script>
輸出結果為:k=0 k=1 k=2 k=3 k=4 k=5 k=6 k=7 k=8 k=9 +++k=10 j=0
這一規則可以産生驚人的結果,上代碼
<script>
var scope="global";
function f(){
alert(scope);
var scope="local";
alert(scope);
}
f();
</script>
結果:第一個alert輸出:underfined而不是global,第二個alert輸出local
上面函數f與下面的函數等價:
function f(){
var scope;
alert(scope);
var scope="local";
alert(scope);
}
如果你寫成:
<script>
var scope="global";
function f(){
alert(scope);
var scope2="local";
alert(scope2);
}
f();
</script>
輸出結果為:第一個alert為global,第二個為:local.