JS學習筆記#18 | Javascript 的執行環境 (Execution context)

更新於 發佈於 閱讀時間約 2 分鐘


什麼是執行環境(Execution Context)?

簡單來說,執行環境是 JavaScript 程式碼執行時所在的「環境」。

它決定了程式碼如何被解析和執行,並管理變數、函數以及作用域(scope)的存取。

每當程式碼執行時,JavaScript 引擎會建立一個執行環境。


執行環境的類型

1.全域執行環境(Global Execution Context)

  • 程式開始時建立,是最外層的執行環境。
  • 創建一個全域物件。
    • 在瀏覽器中是 window object
    • 在 Node.js 中是 global object
  • 全域變數和函數會被綁定到這個環境。
  • 只有一個全域執行環境。


2. 函數執行環境(Function Execution Context)

  • 每次呼叫函數時都會創建一個新的執行環境。
  • 創建啟動物件,其中包含arguments 物件
    • 每個函數呼叫都會生成一個新的啟動物件
    • arguments 物件用來處理傳入的參數。
  • 每個函數有自己的獨立環境,包含自己的變數和參數。
  • 當函數執行完畢,這個環境通常會被銷毀(除非有閉包)。



執行環境的生命週期

1.創建階段(Creation Phase)

  • 初始化變數物件(變數和函數宣告被提升,變數預設為 undefined)。
  • 建立作用域鏈(Scope Chain)。
  • 確定 this 的值。


2.執行階段(Execution Phase)

  • 程式碼逐行執行。
  • 變數被賦值,函數被呼叫。


3.銷毀階段(Destruction Phase)

  • 執行完畢後,環境被移除(除非被閉包引用)。



範例

var globalVar = "我是全域的";

function outer() {
var outerVar = "我是外層的";
function inner() {
var innerVar = "我是內層的";
console.log(innerVar); // 我是內層的
console.log(outerVar); // 我是外層的
console.log(globalVar); // 我是全域的
}
inner();
}

outer();

執行過程:

  1. 建立全域執行環境,包含 globalVar 和 outer。
  2. 呼叫 outer(),建立 outer 的執行環境,包含 outerVar 和 inner。
  3. 呼叫 inner(),建立 inner 的執行環境,包含 innerVar。
  4. inner 的作用域鏈讓它能存取外層和全域變數。
  5. 每個環境執行完後依序銷毀。



avatar-img
0會員
20內容數
留言
avatar-img
留言分享你的想法!

































































koko的沙龍 的其他內容
for...of 需要迭代的是具有迭代器的可迭代物件。一般的物件,除非你為它定義迭代器,否則不能使用 for...of。它主要用來迭代「值」。 for...in 迭代的是物件的可枚舉屬性,在陣列中就會迭代索引。通常用來迭代物件屬性,在陣列中較不適合,也較容易出錯。
Spread Syntax和Rest Parameters都使用 ... 符號,Spread Syntax用於展開可迭代物件,例如將陣列或物件的元素複製到新的陣列或物件中,或是在函式呼叫時傳遞參數。Rest Parameters用於收集不定數量的函數參數,將其打包成一個陣列,方便在函數內部進行處理。
身為一名女性,我常常在生活中感受到性別帶來的無形壓力。 而閱讀上野千鶴子《厭女:日本的女性嫌惡》這本書後,讓我突然意識到原來身為女性,在這個社會上彷彿在玩著一款難度超高的遊戲。
5/5厭女:日本的女性嫌惡
這個專案是一個使用 Vue3、Vite、daisyUI 和 Google Gemini AI API 打造的雙 AI 對話模擬器。 使用者可以設定兩個 AI 角色的名稱和描述,然後讓它們自行對話。 這個專案旨在展示前端如何與 AI API 互動,以及如何建立具有互動性的 AI 應用程式。
箭頭函式是 JavaScript ES6(ECMAScript 2015)引入的一種簡化 Function Expression 語法。 它用來快速定義匿名函式,語法簡潔,特性明確,特別適合用於回呼函式等場景。
Function Declaration 與 Function Expression Function Declaration 適合用於需要提升或全域使用的函式。 Function Expression 更靈活,適合用於回呼函式、閉包、高階函式等場景。
for...of 需要迭代的是具有迭代器的可迭代物件。一般的物件,除非你為它定義迭代器,否則不能使用 for...of。它主要用來迭代「值」。 for...in 迭代的是物件的可枚舉屬性,在陣列中就會迭代索引。通常用來迭代物件屬性,在陣列中較不適合,也較容易出錯。
Spread Syntax和Rest Parameters都使用 ... 符號,Spread Syntax用於展開可迭代物件,例如將陣列或物件的元素複製到新的陣列或物件中,或是在函式呼叫時傳遞參數。Rest Parameters用於收集不定數量的函數參數,將其打包成一個陣列,方便在函數內部進行處理。
身為一名女性,我常常在生活中感受到性別帶來的無形壓力。 而閱讀上野千鶴子《厭女:日本的女性嫌惡》這本書後,讓我突然意識到原來身為女性,在這個社會上彷彿在玩著一款難度超高的遊戲。
5/5厭女:日本的女性嫌惡
這個專案是一個使用 Vue3、Vite、daisyUI 和 Google Gemini AI API 打造的雙 AI 對話模擬器。 使用者可以設定兩個 AI 角色的名稱和描述,然後讓它們自行對話。 這個專案旨在展示前端如何與 AI API 互動,以及如何建立具有互動性的 AI 應用程式。
箭頭函式是 JavaScript ES6(ECMAScript 2015)引入的一種簡化 Function Expression 語法。 它用來快速定義匿名函式,語法簡潔,特性明確,特別適合用於回呼函式等場景。
Function Declaration 與 Function Expression Function Declaration 適合用於需要提升或全域使用的函式。 Function Expression 更靈活,適合用於回呼函式、閉包、高階函式等場景。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
Thumbnail
本章節將引導你如何建立一個TypeScript開發環境,這包括安裝Node.js、npm和TypeScript,建立一個TypeScript項目,設置編輯器,以及編寫和編譯TypeScript代碼。在完成這些步驟之後,你將能夠編寫、編譯和運行TypeScript代碼。
Thumbnail
本章節主要介紹了JavaScript中的流程控制,包括條件語句(如if、else if、else和三元運算子)和循環結構(如for迴圈、while迴圈等)。同時,也提供了如何使用break、continue和label來控制迴圈的執行。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
如果你曾經撰寫過網頁,那你一定接觸過 JavaScript 無論是在 NodeJs 或是瀏覽器中運行。 但你有沒有想過,我們寫下的 JS 程式碼,這些看似單純的英文和符號,是如何被轉化為機器能夠理解和執行的程式呢? 今天,讓我們一起深入了解其中的核心主角 ——Google 開發的開源 Java
※ 函式基礎介紹: ※ JavaScript 特殊的函式特性: 函式可以當成值來傳遞 (可以放進變數或放進物件) 函式可以當成函式的參數 callback - 在特定事件中觸發函式 (非同步特性) ※ 函式的基本寫法: ※ 調用 (invoke) 函式: "調用" 意指呼叫或執行
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
JSDoc 全名是 JavaScript Documentation,顧名思義是為 JavaScript 所使用的 API 文件,在程式碼內透過註解的方式撰寫,運行後 JSDoc 會自動掃描註解內容,並生成一份網頁版的文件,對於沒有使用 Typescript 開發的專案,也
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
Thumbnail
本章節將引導你如何建立一個TypeScript開發環境,這包括安裝Node.js、npm和TypeScript,建立一個TypeScript項目,設置編輯器,以及編寫和編譯TypeScript代碼。在完成這些步驟之後,你將能夠編寫、編譯和運行TypeScript代碼。
Thumbnail
本章節主要介紹了JavaScript中的流程控制,包括條件語句(如if、else if、else和三元運算子)和循環結構(如for迴圈、while迴圈等)。同時,也提供了如何使用break、continue和label來控制迴圈的執行。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
如果你曾經撰寫過網頁,那你一定接觸過 JavaScript 無論是在 NodeJs 或是瀏覽器中運行。 但你有沒有想過,我們寫下的 JS 程式碼,這些看似單純的英文和符號,是如何被轉化為機器能夠理解和執行的程式呢? 今天,讓我們一起深入了解其中的核心主角 ——Google 開發的開源 Java
※ 函式基礎介紹: ※ JavaScript 特殊的函式特性: 函式可以當成值來傳遞 (可以放進變數或放進物件) 函式可以當成函式的參數 callback - 在特定事件中觸發函式 (非同步特性) ※ 函式的基本寫法: ※ 調用 (invoke) 函式: "調用" 意指呼叫或執行