JavaScript引擎相關名詞
- 2019 年 11 月 6 日
- 筆記
JS引擎的一些事
JS引擎
- 一個讀取代碼並運行的引擎,沒有單一的"JS引擎";
- 每個瀏覽器都有自己的引擎,流行的引擎項目:
- V8 開源,由 Google 開發,用 C ++ 編寫
- Rhino 由 Mozilla 基金會管理,開源,完全用 Java 開發
- SpiderMonkey 第一個支持 Netscape Navigator 的 JavaScript 引擎,目前正供 Firefox 使用
- JavaScriptCore 開源,以Nitro形式銷售,由蘋果為Safari開發
- KJS KDE的引擎,最初由 Harri Porten 為 KDE 項目中的 Konqueror 網頁瀏覽器開發
- Chakra(JScript9) Internet Explorer
- Chakra(JavaScript) Microsoft Edge
- Nashorn OpenJDK 的一部分,由 Oracle Java 語言和工具組編寫
- JerryScript 物聯網的輕量級引擎
作用域
- 可以從中訪問變量的"區域"
詞法作用域
- 在詞法階段的作用域,換句話說,詞法作用域是由你在寫代碼時將變量和塊作用域寫在哪裡來決定的,因此當詞法分析器處理代碼時會保持作用域不變
塊作用域
- 由花括號{}創建的範圍
作用域鏈
- 函數可以上升到它的外部環境(詞法上)來搜索一個變量,它可以一直向上查找,直到它到達全局作用域
同步
- 一次執行一件事, 「同步」引擎一次只執行一行,JavaScript是同步的
異步
- 同時做多個事,JS通過瀏覽器API模擬異步行為
事件循環(Event Loop)
- 瀏覽器API完成函數調用的過程,將回調函數推送到回調隊列(callback queue),然後當堆棧為空時,它將回調函數推送到調用堆棧
堆棧
- 一種數據結構,只能將元素推入並彈出頂部元素。 想想堆疊一個字形的塔樓; 你不能刪除中間塊,後進先出
堆
- 變量存儲在內存中
調用堆棧
- 函數調用的隊列,它實現了堆棧數據類型,這意味着一次可以運行一個函數。 調用函數將其推入堆棧並從函數返回將其彈出堆棧
執行上下文
- 當函數放入到調用堆棧時由JS創建的環境
閉包
- 當在另一個函數內創建一個函數時,它「記住」它在以後調用時創建的環境
垃圾收集
- 當內存中的變量被自動刪除時,因為它不再使用,引擎要處理掉它
變量的提升
- 當變量內存沒有賦值時會被提升到全局的頂部並設置為undefined
this
- 由JavaScript為每個新的執行上下文自動創建的變量/關鍵字