首頁 >web前端 >js教程 >JAVASCRIPT函數作用域與事先宣告 分享_基礎知識

JAVASCRIPT函數作用域與事先宣告 分享_基礎知識

WBOY
WBOY原創
2016-05-16 17:24:461136瀏覽

有些語言如C、java都有區塊級作用域,也就是花括號內的每一段程式碼都具有各自的作用域,而且變數在宣告它們的程式碼段之外是不可見的,但是javascript沒有區塊級作用域。 javascript使用函數作用域,即變數在聲明它們的函數體以及這個函數體嵌套的任意函數體內都是有定義的,也即函數內聲明的所有變數在函數體內始終是可見的。這樣就意味著變數在宣告之前就可以使用,這個特性稱為"宣告提前",即javascript函數裡宣告的所有變數都提前至函數的頂端。來看個例子。

複製程式碼 程式碼如下:

  var test1 = "guncftest.== (){
    console.log(test1);  
    var test1 = "localVariable";
  》 〕 㜀〦.>>>>>>>>>>>>>>>>>>>>>>>>運動.==>>>>>>>>>>>>>>>>>>木>>>>>>>木>木>>木>4成長); 🎜>上述函數執行的結果是:先輸出"undefined",再輸出"localVariable"。
很多人會誤以為結果是:先輸出"globalVariable,再輸出localVariable"。其實不然,由於函數作用域的特性,局部變數在整個函數體始終是有定義的,也即,在函數體內局部變數遮蓋了同名全域變量,但是只有在程式執行到var語句的時候,局部變數才會被真正的賦值。因此,上述過程相當於,將函數內的變數宣告提前至函數體頂部,同時變數初始化留在原來的位置。就相當於以下這個函數



複製程式碼
程式碼如下:> ;  function test(){    var test1;  //將函數內的變數宣告提前至函數頂端
    consteststeststestconstests; ";  //賦值
    console.log(test1);
  }


但是,如果函數內沒有用var聲明變數,情況又有所不同。



複製程式碼

程式碼如下:  var test1 = "guncftest.== (){    console.log(test1);      test1 = "localVariable";  
這個函數執行的結果是:先輸出"globalVariable",再輸出"localVariable"。
由於函數體內的test1變數沒有用var聲明,就預設為全域變量,當然就不存在變數事先宣告的問題。第一行就會輸出"globalVariable",而第三行改變了test1全域變數的值,輸出了"localVariable"。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn