天天看點

JavaScript作用域之沒有塊級作用域

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.

繼續閱讀