javascript 關於局部變數和全域變數,javascript全域變數
js中函數執行過程不只是單純的局部變數覆蓋全域變數,和函數裡面的聲明情況有關。比如:
<script> var a =1; function test(){ alert(a); //a為undefined! 這個a並不是全域變數,這是因為在function scope裡已經聲明了(函數體倒數第4行)一個重名的局部變數, //所以全域變數a被覆蓋了,這說明了Javascript在執行前會對整個指令檔的定義部分做完整分析,所以在函數test()執行前, //函數體中的變數a就被指向內部的局部變數.而不是指向外部的全域變數. 但這時a只有聲明,還沒賦值,所以輸出undefined。 a=4 alert(a); //a為4,沒懸念了吧? 這裡的a還是局部變數哦! var a; //局部變數a在這行聲明 alert(a); //a還是為4,這是因為之前已把4賦給a了 } test(); alert(a); //a為1,這裡並不在function scope內,a的值為全域變數的值 </script>
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()內的代碼
在javascript中怎把局部變數的值賦給全域變數
var a=0;//全域
function a(){
var b=5;//局部
a=b;//賦值
}
alert(a);//此時a為5