20120404

JavaScript 區域變數和全域變數比較,還附贈奇怪的未宣告變數唷

全域變數( global variable )和區域變數( local variable )的宣告和用法不知道是不行的唷。

本篇簡單明瞭地說明全域變數和區域變數的差異,並舉一些小例子。
然後就如標題所說,本篇真的會附贈告訴大家 JavaScript 中的未宣告變數( undeclared variable )是什麼東東。


區域變數( local variable )

  • 在 function 中宣告
  • 只能在宣告的 function 中使用( local scope )
  • 不同的 function 中可宣告相同名稱的區域變數
  • 在宣告變數 function 結束時,區域變數也就消滅了

全域變數( global variable )

  • 在 function 外宣告
  • 整個網頁中的 script 包含 function 都可以存取該變數( global scope )
  • 同一個網頁中不能宣告相同的全域變數名稱
    ( 是可以啦,但後宣告的會覆蓋掉之前宣告的 )
  • 在網頁關閉時,全域變數消滅

例子:
myHtml.html
<html>
<body>
<head>
<script type="text/javascript" src="myJavascript.js"></script>
</head>
<input id="btn1" type="button" onclick="outputglobal()" value="按下呼叫 outputglobal()">
<input id="btn2" type="button" onclick="outputlocal()" value="按下呼叫 outputlocal()">

</body>
</html>

myJavascript.js
var a=0;

function outputglobal()
{
alert("a="+a);
alert("b="+b);
}
function outputlocal()
{
var b=0;
alert("a="+a);
alert("b="+b);
}

按下 btn2 時會跳出兩個提示視窗,分別是 a=0 和 b=0,
雖然我們在 outputlocal() 中只宣告和定義變數 b,但 a 是定義在 function 外的全域變數,因此我們仍可以存取其值 0。
按下 btn1 時只會跳出一個提示視窗 a=0,
因為 btn1 的 onClick 事件所呼叫的 outputglobal() 中,並未定義變數 b。

未宣告變數( undeclared variable )

因為 JavaScript 相對其他程式語言來說,算是比較不嚴謹的語言,
因此會有像這種未定義的變數出現。

所謂的"未定義",指的是沒有使用關鍵字 var 來在使用某變數前宣告該變數。如,
var mood="happy";//宣告(*註)
myName="Coyan";//未宣告就直接用了

而這樣未宣告就直接使用變數居然是可以的(真隨便阿),
若是在 function 外,其效果等同於宣告為全域變數;
若是在 function 內,其效果等同於宣告為區域變數。

不過良心建議是還是打一下" var " 吧,才三個字母而已啊,這樣程式碼也可以一目了然知道是在宣告變數。

註:為什麼心情很高興呢?因為我今天量體重少了一公斤,哈哈!

2 則留言:

匿名 提到...

僅有在函式(function)內,透過 var 所宣告的變數才能算是 Local Variable 區域變數,若沒有使用 var 關鍵字宣告,無論是在哪裡宣告的變數,都會屬於 Global Variable 全域變數的範疇,此細節請多多注意避免錯誤。

匿名 提到...

hash

張貼留言