javascript中錯誤使用var造成undefined


在javascript中依據變量作用的范圍不同分為局部變量和全局變量,直接定義的變量是全局變量,全局變量能夠被全部的腳本訪問;在函數中定義的變量是局部變量,局部變量僅僅在函數內有效。

假設全局變量和局部變量使用同樣的變量名,則局部變量將會覆蓋全局變量。

樣例代碼:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>js中全局變量與局部變量</title>
	</head>
	<body>
		<script type="text/javascript">
			var a = "全局變量";
			function test1()
			{
				var a = "局部變量";
				
				alert(a);
			}
			
			function test2()
			{
				alert(a);
				
				var a = "局部變量";
				
				alert(a);
			}
			
			function test3()
			{
				alert(a);
				
				a = "局部變量";
				
				alert(a);
			}
		</script>
		
		<input type="button"  value="test1" onclick="test1()"/>
		<input type="button"  value="test2" onclick="test2()"/>
		<input type="button"  value="test3" onclick="test3()"/>

	</body>
</html>

執行的結果是這種:

點擊test1 ,彈出局部變量。

點擊test2,彈出undefined,再彈出局部變量

  點擊test3,彈出全局變量,再彈出局部變量


這就是使用var和不使用的差別所在:

假設使用var,那么程序會強制定義一個新變量。

假設沒有使用var,系統會優先在當前上下文中搜索是否存在該變量,僅僅有在不存在的前提下才會又一次定義一個新變量。


test3中,使用的變量a均為全局變量,第一次直接輸出了全局變量,第二次是直接為全局變量賦值之后使用。

test1和test2中都存在在function中使用var定義同名新變量,會導致函數中的變量覆蓋掉全局變量。所以在test2中:第一次輸出的a是已經被覆蓋了的局部變量a,可是沒有給予初值,所以會出現undefined這個結果。這樣使用變量實際上是錯誤的,大家應該避免。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM