日常在群里討論一些概念性的問題,比如變量提升,作用域和閉包相關問題的時候,經常會聽一些大佬們給別人解釋的時候說執行上下文,調用上下文巴拉巴拉,總有點似懂非懂,不明覺厲的感覺。今天,就對這兩個概念梳理一下,加深對js基礎核心的理解。 1. 執行上下文(execution context)與可執行 ...
執行上下文就是JavaScript在被解析和運行時環境的抽象概念,JavaScript 運行任何代碼都是在執行上下文環境中運行的,執行上下文包括三個周期:創建 運行 銷毀,重點說一下創建環節。 創建環節 函數被調用,但未未被執行 會執行三件事情 創建變量對象,首先初始化函數的arguments對象,提升函數聲明和變量聲明,從近到遠查找函數運行所需要的變量。 創建作用域鏈,作用域就是一個獨立的地盤, ...
2019-03-30 14:01 0 1157 推薦指數:
日常在群里討論一些概念性的問題,比如變量提升,作用域和閉包相關問題的時候,經常會聽一些大佬們給別人解釋的時候說執行上下文,調用上下文巴拉巴拉,總有點似懂非懂,不明覺厲的感覺。今天,就對這兩個概念梳理一下,加深對js基礎核心的理解。 1. 執行上下文(execution context)與可執行 ...
前言 如果你是一名 JavaScript 開發者,或者想要成為一名 JavaScript 開發者,那么你必須知道 JavaScript 程序內部的執行機制。執行上下文和執行棧是 JavaScript 中關鍵概念之一,是 JavaScript 難點之一。 理解執行上下文和執行棧同樣有助於理解 ...
先看個小例子 為什么打印出來的是 undefined 呢? 執行上下文概念 當代碼運行時,會產生一個對應的執行環境,在這個環境中,所有變量會被事先提出來(變量提升),有的直接賦值,有的為默認值 undefined,代碼從上往下開始執行,就叫做執行上下文 ...
單線程的 JavaScript 一段一段地執行,前面的執行完了,再執行后面的,試想一個,如果前一個任務需要執行很久,比如接口請求、I/O 操作,此時后面的任務只能干巴巴地等待么?干等不僅浪費了資源,而且頁面的交互程度也很差。JavaScript 意識到了這個問題,他們將任務分成了同步任務和異步 ...
我們都知道,JS代碼的執行順序總是與代碼先后順序有所差異,當先拋開異步問題你會發現就算是同步代碼,它的執行也與你的預期不一致,比如: 按照代碼書寫順序,應該先輸出 聽風是風,再輸出 echo才對,很遺憾,兩次輸出均為 echo;如果我們將上述代碼中的函數聲明改為函數表達式,結果又不 ...
本博文基於知乎"JavaScript作用域問題?"一問,而引起了對JavaScript事件循環和單線程等概念與實踐上的研究、深入理解。 一、概念 0.關鍵詞:JavaScript單線程、事件循環(event loop)、事件隊列(event queue)、執行棧(execution ...
前言 前面突然想起一個問題,我們常說棧的存儲是先進后出,那么事件循環里面的事件為啥是先進先執行的呢,這不是和棧存儲方式向駁論了嗎,還有所謂的宏任務和微任務的調用優先級之分是如何處理的呢,基於弄清楚其中的具體流程和機制,這里做一份總結記錄 背景 JS是單線程 ...
每一個函數都有自己的執行上下文EC(執行環境 execution context),並且每個執行上下文中都有它自己的變量對象VO(Variable object),用於存儲執行上下文中的變量 、函數聲明 、函數參數,這解釋了js如何找到我們定義的函數和變量。並且函數是js中唯一一個能創建出作用域 ...