javascript中錯誤使用var造成undefined

字號:


    在javascript中根據(jù)變量作用的范圍不同分為局部變量和全局變量,直接定義的變量是全局變量,全局變量可以被所有的腳本訪問;在函數(shù)中定義的變量是局部變量,局部變量只在函數(shù)內(nèi)有效。
    如果全局變量和局部變量使用相同的變量名,則局部變量將會覆蓋全局變量。
    例子代碼:
    <!DOCTYPE html> 
    <html> 
      <head> 
        <meta charset="utf-8"> 
        <title>js中全局變量與局部變量</title> 
      </head> 
      <body> 
        <script type="text/javascript"> 
          var a = "全局變量"; 
          function test1() 
          { 
            var a = "局部變量"; 
            alert(a); 
          } 
          function test2() 
          { 
            alert(a); 
            var a = "局部變量"; 
            alert(a); 
          } 
          function test3() 
          { 
            alert(a); 
            a = "局部變量"; 
            alert(a); 
          } 
        </script> 
        <input type="button" value="test1" onclick="test1()"/> 
        <input type="button" value="test2" onclick="test2()"/> 
        <input type="button" value="test3" onclick="test3()"/> 
      
      </body> 
    </html> 
    運行的結(jié)果是這樣的:
    點擊test1 ,彈出局部變量。
    點擊test2,彈出undefined,再彈出局部變量
    點擊test3,彈出全局變量,再彈出局部變量
    這就是使用var和不使用的區(qū)別所在:
    如果使用var,那么程序會強(qiáng)制定義一個新變量。
    如果沒有使用var,系統(tǒng)會優(yōu)先在當(dāng)前上下文中搜索是否存在該變量,只有在不存在的前提下才會重新定義一個新變量。
    test3中,使用的變量a均為全局變量,第一次直接輸出了全局變量,第二次是直接為全局變量賦值之后使用。
    test1和test2中都存在在function中使用var定義同名新變量,會導(dǎo)致函數(shù)中的變量覆蓋掉全局變量。所以在test2中:第一次輸出的a是已經(jīng)被覆蓋了的局部變量a,但是沒有給予初值,所以會出現(xiàn)undefined這個結(jié)果。這樣使用變量實際上是錯誤的,大家應(yīng)該避免。