在javascript中可以使用var來定義變量也可以不定義直接使用,那麼他們有什麼差別呢?我們來做個小試驗:
var a;
a = 1 ;
alert(a);
b = 1 ;
alert(b);
從上面的運作結果看來似乎是否使用var定義好像沒有什麼差別,那我們再來做兩個試驗:
// 第一段
var a;
alert(a);
// 第二段
alert(b);
上 面兩個例子的運作結果,第一個可以執行,輸出undefined,我們知道undefined代表該變量的值不存在,但是能執行說明變量存在。而第二個不 可以執行直接報出了javascript錯誤變量不存在。我們再來看下面的例子:
// 第一段
var a
a = " a "
alert(window.a)
// 第二段
var b
b = " b "
alert(window.b)
// 第三段
function testC() ... {
var c
c="c"
}
testC()
alert(window.c)
// 第四段
function testD() ... {
d="d"
}
testD()
alert(window.d) 上面四段的運作結果為:
- a
- b
- undefined
- d
由上面的例子我們可以看出,在順序執行時,用var定義的變量與直接指派的變量都為window的屬性。都可以直接用window.來引用。而在一個function中用var定義的變量為局部變量,在這個function以外的地方無法通路。在function中直接使用一個變量相當于通路window對象下的屬性。
請看一下例子:
// 第一段
window.a = " a " ;
function testA() ... {
alert(a);
}
testA()
// 第二段
window.b = " b "
function testB() ... {
var b
alert(b);
}
testB() 上面的運作結果為:
- a
- undefined
當局部變量和window屬性同名的時候,優先使用局部變量。在java中局部變量在“{}”中起作用,裡面的可以通路外面的反之則不行,那麼在javascript中是不是這樣的呢?我們做下面的試驗:
function test1()
... {
if(true)...{
var x=0
for(var i=0;i<10;i++)
...{
x++;
}
}
alert("x="+x);
alert("i="+i);
}
test1()
上面運作結果為:
- x=10
- i=10
由此結果我們看出當“{}”結束以後我們仍然可以通路變量,程式段的結束并不會影響變量的通路。
好了,做了這麼多試驗,我來總結一下:
- 定義變量需要使用var,如果不使用var定義則系統會向上查找,如果前面從來沒定義過該變量,則認為該變量是window的屬性。
- 平鋪的javascript中使用var定義的變量為window的屬性
- 在一個function中定義的變量,在該function中後面的代碼可以引用。
- javascript中的變量通路不是依靠“{}”來管理的。