天天看點

JavaScript引擎相關名詞

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