JavaScript 的執行上下文

當 JS 引擎處理一段腳本內容的時候,它是以怎樣的順序解析和執行的?腳本中的那些變量是何時被定義的?它們之間錯綜復雜的訪問關系又是怎樣創建和鏈接的?要解釋這些問題,就必須了解 JS 執行上下文的概念。
JavaScript引擎: JavaScript引擎是一個計算機程序,它接收JavaScript源代碼并將其編譯成CPU可以理解的二進制指令(機器碼)。JavaScript引擎通常是由瀏覽器供應商開發的,每一個主流瀏覽器都有一個自己開發的引擎。如:谷歌Chrome瀏覽器的V8引擎,Firefox的SpiderMonkey和IE的Chakra。

所有JavaScript代碼都需要在某種環境中托管運行。在大多數情況下,網絡瀏覽器就是這個環境。瀏覽器的JavaScript引擎會創造一個特殊的環境來處理這些JavaScript代碼的轉換和執行。

執行上下文的基本概念

執行上下文(Execution Context) 是 ECMAScript 規范中用于管理代碼執行環境的抽象機制,定義了變量、函數和 this 值的作用域規則。

每個執行上下文由以下三個核心組件構成:詞法環境(Lexical Environment)、變量環境(Variable Environment)和 This 綁定(ThisBinding)。

詞法環境:(Lexical Environment) 詞法環境是一種規范類型,用于根據 ECMAScript 代碼的詞法嵌套結構,將標識符與特定變量和函數關聯起來。簡單地理解,詞法環境用于存儲變量和函數的標識符綁定,即變量名與值的映射關系。其包含兩個部分,分別是環境記錄器和外部環境的引用。環境記錄(Environment Record)用于實際存儲變量名和值的映射(如 let a = 1 會記錄為 a → 1),是具體存儲變量和函數定義的對象。外部引用(Outer Reference)是指向外層詞法環境的指針,用于形成作用域鏈。

變量環境(Variable Environment): 變量環境是一種詞法環境,其環境記錄保存由 VariableStatements(即 var 聲明)創建的綁定。在 ES6 之后,變量環境是詞法環境的一種特例,兩者通常指向同一對象,但規范中仍保留區分以兼容舊代碼。

This 綁定(ThisBinding): this 綁定是一個值,用作當前執行上下文代碼的接收者。this 值在運行時根據函數調用方式確定(如全局調用、方法調用、構造函數調用等)。

ECMA-262 第 10 版(2024)

  • “An execution context is a specification device that is used to track the runtime evaluation of code by an ECMAScript implementation.”(執行上下文是一種規范機制,用于跟蹤 ECMAScript 實現對代碼的運行時評估。)
  • “A Lexical Environment is a specification type used to define the association of Identifiers to specific variables and functions based on the lexical nesting structure of ECMAScript code.”(詞法環境是一種規范類型,用于根據 ECMAScript 代碼的詞法嵌套結構,將標識符與特定變量和函數關聯起來。)
  • “A Variable Environment is a Lexical Environment whose Environment Record holds bindings created by VariableStatements.”(變量環境是一種詞法環境,其環境記錄保存由 VariableStatements(即 var 聲明)創建的綁定。)
  • “The this binding is a value that is used as the receiver for the current execution context’s code.”
    (this 綁定是一個值,

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88938.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88938.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88938.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掉線監測-tezos rpc不能用,改為殘疾網頁監測

自從有了編程伴侶,備忘的需求變得更低了,明顯不擔心記不住語法需要記錄的情景。然而還是保持習慣,就當寫日記吧,記錄一下自己時不時在瞎搗騰啥。tm,好人誰記日記。就是監控灰色各自前緊挨著出現了多少紅色格子。一共查…

Spark Expression codegen

Expression codegen src/main/scala/org/apache/spark/sql/catalyst/expressions/Expression.scala def genCode(ctx: CodegenContext): ExprCode = {ctx.subExprEliminationExprs.get(ExpressionEquals(

Axios方法完成圖書管理頁面完整版

一、目的 需要實現的功能有包括&#xff1a; 從服務器發送請求&#xff0c;獲取圖書列表并渲染添加新圖書編輯現有圖書信息刪除圖書以上每一步都實現與服務器存儲數據同步更改 二、基礎配置 引入Axios庫&#xff1a; <script src"https://cdn.jsdelivr.net/npm/ax…

SQLlite下載以及簡單使用

SQLite Download Page cd D:\WK\2025\StudentManagerSystem\sqlite D: entManagerSystem\sqlite>sqlite3.exe 所建庫的名字.db 一&#xff1a;命令 <1>打開某個數據庫文件中 sqlite3 test.db<2>查看所有的命令介紹(英文) .help<3>退出當前數據庫系統 .qu…

函數柯里化詳解

一、函數柯里化&#xff1a; 是一種高階函數技術&#xff0c;它將一個多參數函數轉換為一系列單參數函數的鏈式調用。 核心概念 定義&#xff1a;將一個函數 f(a, b, c) 轉換為 f(a)(b)© 的形式 **本質&#xff1a;**通過閉包保存參數&#xff0c;實現分步傳參 關鍵特征&a…

C++11:constexpr 編譯期性質

C11&#xff1a;constexpr & 編譯期性質常量表達式 constexpr變量IiteralType函數自定義字面量參數匹配與重載規則靜態斷言常量表達式 constexpr const expression常量表達式&#xff0c;是C11引入的新特性&#xff0c;用于將表達式提前到編譯期進行計算&#xff0c;從而減…

【每天一個知識點】多模態信息(Multimodal Information)

常用的多模態信息&#xff08;Multimodal Information&#xff09;指的是來源于多種感知通道/數據類型的內容&#xff0c;這些信息可以被整合處理&#xff0c;以提升理解、推理與生成能力。在人工智能和大模型系統中&#xff0c;典型的多模態信息主要包括以下幾類&#xff1a;?…

iOS 抓包工具精選對比:不同調試需求下的工具適配策略

iOS 抓包痛點始終存在&#xff1a;問題不是“抓不抓”&#xff0c;而是“怎么抓” 很多開發者都遇到過這樣的情況&#xff1a; “接口沒有返回&#xff0c;連日志都沒打出來”“模擬器正常&#xff0c;真機無法請求”“加了 HTTPS 雙向認證&#xff0c;抓不到了”“明明設置了 …

圖像修復:深度學習實現老照片劃痕修復+老照片上色

第一步&#xff1a;介紹 1&#xff09;GLCIC-PyTorch是一個基于PyTorch的開源項目&#xff0c;它實現了“全局和局部一致性圖像修復”方法。該方法由Iizuka等人提出&#xff0c;主要用于圖像修復任務&#xff0c;能夠有效地恢復圖像中被遮擋或損壞的部分。項目使用Python編程語…

css 邊框顏色漸變

border-image: linear-gradient(90deg, rgba(207, 194, 195, 1), rgba(189, 189, 189, 0.2),rgba(207, 194, 195, 1)) 1;

本地 LLM API Python 項目分步指南

分步過程 需要Python 3.9 或更高版本。 安裝 Ollama 并在本地下載 LLM 根據您的操作系統&#xff0c;您可以從其網站下載一個或另一個版本的 Ollama 。下載并啟動后&#xff0c;打開終端并輸入以下命令&#xff1a; ollama run llama3此命令將在本地拉取&#xff08;下載&…

日本的所得稅計算方式

? 【1】所得稅的計算步驟&#xff08;概要&#xff09; 日本的所得稅大致按照以下順序來計算&#xff1a; 1?? 統計收入&#xff08;銷售額、工資等&#xff09; 2?? 扣除必要經費等&#xff0c;得到「所得金額」 3?? 扣除各類「所得控除」&#xff08;所得扣除&#xf…

【langchain4j篇01】:5分鐘上手langchain4j 1.1.0(SpringBoot整合使用)

目錄 一、環境準備 二、創建項目、導入依賴 三、配置 application.yml 四、注入Bean&#xff0c;開箱即用 五、日志觀察 一、環境準備 首先和快速上手 Spring AI 框架一樣的前置條件&#xff1a;先申請一個 apikey &#xff0c;此部分步驟參考&#xff1a;【SpringAI篇01…

js運算符

運算符 jarringslee*賦值運算符 - / 對變量進行賦值的運算符&#xff0c;用于簡化代碼。左邊是容器&#xff0c;右邊是值一元運算符正號 符號- 賦予數據正值、負值自增 自減– 前置和后置&#xff1a;i和i&#xff1a;一般情況下習慣使用后置i&#xff0c;兩者在單獨…

next.js 登錄認證:使用 github 賬號授權登錄。

1. 起因&#xff0c; 目的: 一直是這個報錯。2. 最終效果&#xff0c; 解決問題&#xff0c;能成功登錄、體驗地址&#xff1a;https://next-js-gist-app.vercel.app/代碼地址&#xff1a; https://github.com/buxuele/next-js-gist-app3. 過程: 根本原因: github 的設置&…

深入理解設計模式:原型模式(Prototype Pattern)

在軟件開發中&#xff0c;對象的創建是一個永恒的話題。當我們需要創建大量相似對象&#xff0c;或者對象創建成本較高時&#xff0c;傳統的new操作符可能不是最佳選擇。原型模式&#xff08;Prototype Pattern&#xff09;為我們提供了一種優雅的解決方案——通過克隆現有對象…

Rocky Linux 9 源碼包安裝php8

Rocky Linux 9 源碼包安裝php8大家好&#xff0c;我是星哥&#xff01;今天咱們不聊yum一鍵安裝的“快餐式”部署&#xff0c;來點兒硬核的——源碼編譯安裝PHP 8.3。為什么要折騰源碼&#xff1f;因為它能讓你深度定制PHP功能、啟用最新特性&#xff0c;還能避開系統默認源的版…

Django母嬰商城項目實踐(四)

4、路由規劃與設計 1、概述 介紹 路由稱為 URL(Uniform Resource Locator,統一資源定位符),也稱為 URLconf,對互聯網上得到的資源位置和訪問方式的一種簡潔表示,是互聯網上標準梓源的地址。互聯網上的每個文件都有一個唯一的路由,用于指出網站文件的路由位置,也可以理…

論文閱讀:arxiv 2025 A Survey of Large Language Model Agents for Question Answering

https://arxiv.org/pdf/2503.19213 https://www.doubao.com/chat/12038636966213122 A Survey of Large Language Model Agents for Question Answering 文章目錄速覽論文翻譯面向問答的大型語言模型代理綜述摘要一、引言速覽 這篇文檔主要是對基于大型語言模型&#xff08;…

ONNX 是什么

ONNX 是什么&#xff1f; ONNX&#xff0c;全稱 Open Neural Network Exchange&#xff0c;是微軟和 Facebook&#xff08;現在的 Meta&#xff09;聯合發起的一個開放的神經網絡模型交換格式。簡單理解&#xff1a;ONNX 是一個通用的「AI 模型存檔格式」。用 PyTorch、TensorF…