2019年3月12日 星期二

[Back To Basic] Javascript - 作用域(Scope)

javascript中有2種作用域(scope)
  • local scope / function scope
每個function都會建立一個作用域(scope),在function之內宣告的變數,外面看不到,也不可訪問/使用。
  • global scope
作用域(scope),會決定

  • 可見性(visibility)
  • 可訪問性(accessibility)

區域變數(Local Variables)

  • 宣告在function中的變數,只有在該function中可見、可訪問
  • 區域變數,在function開始時建立,function結束時移除
function myFunction1() {
    var userName = 'Shawn';
    // userName = 'Shawn'
}
    // userName undefined

全域變數(Global Variables)

  • 宣告在function外的變數,就是全域變數
  • 在網頁中的所有script和function都可見、可訪問
var userDept = 'Marketplace';
function myFunction2() {
    //  userDept = 'Marketplace'
}
    //  userDept = 'Marketplace'

變數(Variables)

在javascript中,object 和 function 也是變數(variables)。
所以object 和 function 的可見性、可訪問性也是遵循作用域(scope)的規則。

自動判定為全域變數(Automatically Global)

若在function中的變數沒有宣告,則自動變成全域。
function myFunction3() {
    sex = 'male';
    // sex = 'male';
}
// sex = 'male'

嚴格模式(Strict mode)

為了避免自動判定為全域變數(Automatically Global)的問題,可以使用嚴格模式(Strict mode),在嚴格模式中,變數不會被自動視為全域。

全域變數在HTML中(Global Variables in HTML)

所有的全域變數,都會自動存在window物件底下。

var birthday = '1/1';
window.birthday; // 1/1

盡量避免使用全域變數,因為可以蓋來蓋去

javascript變數的生命週期

  • 變數的生命起始於宣告。
  • 區域變數在function結束時中止。
  • 全域變數在瀏覽器關閉或瀏覽器頁面關閉時終止。
  • function的參數視為區域變數。

沒有留言:

張貼留言