javascript作用域簡單例項程式碼

admin發表於2017-03-19

作用域在js中是一個重要的概念,是必須要掌握且必須要掌握好的概念,下面就通過程式碼例項做一下簡單介紹希望能夠對初學者帶來一定的幫助。在C#或者java等語言中,每一對大括號({})都會形成一個作用域,也就是說具有塊級作用域,但是在javascript中並沒有塊級作用域,取而代之的是函式作用域(function scope),也就是說變數在它宣告的函式體內或者巢狀在此函式體內的函式體中都是可見的。程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
function a(){
  var num=1;
  function a_1(){
    console.log(num);
  }
  a_1();
}
a()

變數的num在函式a中和巢狀在a中的a_1中都是可見的。不過不能夠在函式a外面使用。這裡需要注意的是,宣告變數num是使用var運算子,如果不使用var宣告的話,那麼次變數的作用域就是全域性的,程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
function a(){
  num=1;
  function a_1(){
    console.log(num);
  }
  a_1();
}
a();
console.log(num);

從以上程式碼的輸出值可以看出num變數雖然在函式a中宣告的,但是並沒有使用運算子var,所以它的作用域是全域性的,在函式體外面也是可見的。

變數的宣告會被前置:

無論變數宣告在函式體內何種位置,在整個函式體內都是可見的,這就是所謂的"宣告提前",程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
function a(){
  console.log(num);
  var num=1;
}
a()

以上程式碼的輸出值是undefined,這說明變數已經被宣告但是並沒有被賦值。這是因為在js預編譯階段,變數會被提前宣告,但是並沒有被賦值,而是在程式碼執行階段被賦值的。

相關文章