javascript變數:全域?還是局部?這個得注意,javascript變數
在JS中,是沒有塊級範圍的
舉兩個個例子:
if語句塊:
if (true){var name='Ling';}alert(name);輸出:Ling
for語句塊;
for(var i=0;i<10;i++) {var name='Ling';}alert(i);alert(name);
輸出:10
輸出:Ling
也就是說最後的結果都是window下全域變數:
<span style="font-family:KaiTi_GB2312;">alert(window.i);alert(window.name);</span>
在Javascript的函數體中,有下面幾種情況需要注意: 1、有無Var
如果有Var,在函數內部聲明變數是局部變數,如下例,讀取不到name的資料。
<span style="font-family:KaiTi_GB2312;">function box(){var name ='Ling';}alert(name);</span> 如果把var去掉的話,那麼就會輸出:Ling,此時聲明的變數為全域變數。在寫代碼的過程中,不適用var就初始變數的話,會有很多意外發生,所以初始變數的時候一定要加上var。
2、全域變數和局部變數命名相同
<span style="font-family:KaiTi_GB2312;">var scope="global"; function t(){ alert(scope); var scope="local" alert(scope); } </span> 最終的輸出結果是:
undefined
local
為什麼會出現這樣的結果?因為:
javascript 變數範圍
(1)全域變數的範圍是全域性的,即在整個Javascript程式中,全域變數作用處處都存在。定義在”script”塊中,在”function”函數外。
(2)局部變數的範圍是局部性的,在函數內部或函數參數時定義,作用範圍是從函數開始到結尾(注意此處說法)
(3)在函數內部,局部變數的優先順序比同名的全域變數優先順序要高;如果存在與全域變數名稱相同的局部變數(包括參數),那麼該全域變數將不再起作用。
原來是這個原因。不知道你看明白了沒有~~
那麼當全域變數和局部變數重名時,怎麼解決這個問題呢?
哈哈~~最簡單的當然就是避免全域變數和局部變數相遇咯~~
還有另外一種方法,window對象的所有屬性擁有全域範圍,用window.全域變數名,如下:
<span style="font-family:KaiTi_GB2312;">var scope="global"; function t(){ alert(window.scope); var scope="local" alert(scope); } </span>
至此,問題也就說完了。
總結
上面的問題其實也反映的另一個問題,命名規範的問題,如果命名不規範,就會出現很多意想不到的問題,所以,花點時間上網查查幾種不同的命名的規範,這樣能在你編寫代碼的時候減少不必要的麻煩。
javascript全域變數與局部變數問題
局部吧 你是在函數裡調用設定的啊
javascript 中的全域變數與局部變數的問題
第一 你這個script的位置在<input type="text" id="dd" value="">程式裝載就直接運行了
var a=document.getElementById("dd").value;;
找不到id="dd".如果將script的位置放在<input ……>的下面就能獲得值了。
如果要定義a為全域變數,原來的地方不變在//調用全域變數,(2)處加入
a=document.getElementById("dd").value
就可以了。
以下是修改後的代碼:
<html>
<head>
<script type="text/javascript">
var a=1;
alert(a);
function DD(){
a=document.getElementById("dd").value;
alert(a);
a=2;
alert(a);
}
</script>
</head>
<body>
<input type="text" id="dd" value="">
<input type="button" value="顯示" onclick="DD()">
</body>
</html>
總之你這裡出現的問題是程式啟動並執行先後順序問題而不是全域等定義域的問題。
代碼的運行順序為
var a=1;
alert(a);
點擊<input type="button" value="顯示" onclick="DD()">後
運行DD()內的代碼