天天看點

javascript使用感受-變量定義

在javascript中可以使用var來定義變量也可以不定義直接使用,那麼他們有什麼差別呢?我們來做個小試驗:

javascript使用感受-變量定義

var  a;

javascript使用感受-變量定義

a = 1 ;

javascript使用感受-變量定義

alert(a);

javascript使用感受-變量定義

b = 1 ;

javascript使用感受-變量定義

alert(b);

從上面的運作結果看來似乎是否使用var定義好像沒有什麼差別,那我們再來做兩個試驗:

javascript使用感受-變量定義

// 第一段

javascript使用感受-變量定義

var  a;

javascript使用感受-變量定義

alert(a);

javascript使用感受-變量定義

// 第二段

javascript使用感受-變量定義

alert(b);

上 面兩個例子的運作結果,第一個可以執行,輸出undefined,我們知道undefined代表該變量的值不存在,但是能執行說明變量存在。而第二個不 可以執行直接報出了javascript錯誤變量不存在。我們再來看下面的例子:

javascript使用感受-變量定義

// 第一段

javascript使用感受-變量定義

var  a

javascript使用感受-變量定義

a = " a "

javascript使用感受-變量定義

alert(window.a)

javascript使用感受-變量定義
javascript使用感受-變量定義

// 第二段

javascript使用感受-變量定義

var  b

javascript使用感受-變量定義

b = " b "

javascript使用感受-變量定義

alert(window.b)

javascript使用感受-變量定義
javascript使用感受-變量定義

// 第三段

javascript使用感受-變量定義
javascript使用感受-變量定義

function  testC() ... {

javascript使用感受-變量定義

var c

javascript使用感受-變量定義

c="c"

javascript使用感受-變量定義

}

javascript使用感受-變量定義

testC()

javascript使用感受-變量定義

alert(window.c)

javascript使用感受-變量定義
javascript使用感受-變量定義

// 第四段

javascript使用感受-變量定義
javascript使用感受-變量定義

function  testD() ... {

javascript使用感受-變量定義

d="d"

javascript使用感受-變量定義

}

javascript使用感受-變量定義

testD()

javascript使用感受-變量定義

alert(window.d) 上面四段的運作結果為:

  1. a
  2. b
  3. undefined
  4. d

由上面的例子我們可以看出,在順序執行時,用var定義的變量與直接指派的變量都為window的屬性。都可以直接用window.來引用。而在一個function中用var定義的變量為局部變量,在這個function以外的地方無法通路。在function中直接使用一個變量相當于通路window對象下的屬性。

請看一下例子:

javascript使用感受-變量定義

// 第一段

javascript使用感受-變量定義

window.a = " a " ;

javascript使用感受-變量定義
javascript使用感受-變量定義

function  testA() ... {

javascript使用感受-變量定義

alert(a);

javascript使用感受-變量定義

}

javascript使用感受-變量定義

testA()

javascript使用感受-變量定義

// 第二段

javascript使用感受-變量定義

window.b = " b "

javascript使用感受-變量定義
javascript使用感受-變量定義

function  testB() ... {

javascript使用感受-變量定義

var b

javascript使用感受-變量定義

alert(b);

javascript使用感受-變量定義

}

javascript使用感受-變量定義

testB() 上面的運作結果為:

  1. a
  2. undefined

當局部變量和window屬性同名的時候,優先使用局部變量。在java中局部變量在“{}”中起作用,裡面的可以通路外面的反之則不行,那麼在javascript中是不是這樣的呢?我們做下面的試驗:

javascript使用感受-變量定義

function  test1()

javascript使用感受-變量定義
javascript使用感受-變量定義

... {

javascript使用感受-變量定義
javascript使用感受-變量定義

    if(true)...{

javascript使用感受-變量定義

        var x=0

javascript使用感受-變量定義

        for(var i=0;i<10;i++)

javascript使用感受-變量定義
javascript使用感受-變量定義

        ...{

javascript使用感受-變量定義

            x++;

javascript使用感受-變量定義

        }

javascript使用感受-變量定義

    }

javascript使用感受-變量定義

    alert("x="+x);

javascript使用感受-變量定義

    alert("i="+i);

javascript使用感受-變量定義

}

javascript使用感受-變量定義

test1()

上面運作結果為:

  1.     x=10
  2.     i=10

由此結果我們看出當“{}”結束以後我們仍然可以通路變量,程式段的結束并不會影響變量的通路。

好了,做了這麼多試驗,我來總結一下:

  1. 定義變量需要使用var,如果不使用var定義則系統會向上查找,如果前面從來沒定義過該變量,則認為該變量是window的屬性。
  2. 平鋪的javascript中使用var定義的變量為window的屬性
  3. 在一個function中定義的變量,在該function中後面的代碼可以引用。
  4. javascript中的變量通路不是依靠“{}”來管理的。