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為每個新的執行上下文自動創建的變量/關鍵字