【JavaScript 新手筆記】【2】全域物件

筆記 JavaScript 中,什麼是 Scope 和全域物件。

一、前言:

開始全域物件以前,先說一下在 JavaScript 中如何界定 Scope。然後再帶到全域物件。

 

二、Scope:

先看看 w3school,在 JavaScript 中只有兩種 Scope:

  • 一種是 function scope,或稱為 local scope:
The scope changes inside functions.
They can only be accessed within the function.
  • 一種是 global scope:

All scripts and functions on a web page can access it.

 意思是 JavaScript 中,是使用函數(function)切分範圍。所以變數不在函數裡,那一定在全域中。

備註:block 和 scope 不同,block 是用『大括號 {}』界定範圍,scope 是用『函數(function)』界定範圍。所以在 JavaScript 中,變數作用範圍並不是依據 block,而是依據 scope。

 

三、全域物件(Global Object)

從 Scope 章節中得知,全域的定義是:

Not inside a Function.

不在函數內的,就叫做全域(Global)。

當 JavaScript 程式碼被執行後,JavaScript Engine 會自動建立起執行環境(Execution Context),此執行環境為全域(Global)。

執行環境(Execution Context)包含了:

  • 你寫的程式碼
  • 全域物件(global object)
  • 特殊變數 this

全域物件(global object)』和『特殊變數 this』都是 JavaScript Engine 建立執行環境時自動幫你建立的。

JavaScript 在不同執行環境有不同的全域物件,在瀏覽器裡,全域物件叫做 window。在 Node.js 環境中,全域物件叫做 global。全域物件可以讓執行環境內所有程式都能使用。

在瀏覽器執行環境中,全域物件 window 等同 this,兩者是相同的。

舉例來說,假設宣告 var a = 10;,你會在全域物件(global object) window 底下找到屬性 a。

var a = 10;
console.log(window.a); // 10,全域物件 window 底下有屬性 a
console.log(this.a); // 10,this 等同全域物件 window

 

四、瀏覽器的全域物件下的屬性與方法:

全域物件底下有很多大家常用的屬性和方法,我條列幾個我常使用的。

屬性:

  • NaN
  • undefined
  • infinity

方法:

  • isNaN()
  • isFinite()
  • parseInt()
  • parseFloat()
  • decodeURI() / encodeURI()
  • eval()

其他方法和屬性可參考 MDN - 標準內建物件

五、保留字(Reserved Words):

另外,建立起執行環境(Execution Context)時,會有保留字(Reserved Words)不提供命名使用,可參考下面兩篇:

 

六、參考資料:

  1. w3school — JavaScript Scope
  2. MDN — 區塊
  3. MDN — 標準內建物件
  4. w3school — JavaScript Reserved Words
  5. MSDN — JavaScript Reserved Words