摘要:當代碼運行前,在全局執行上下文中瀏覽器中就會默認添加一些變量,如,所以在調用代碼時三函數中的激活對象與變量對象一樣,即只不過多了一個變量,為這個可選擇性忽略,沒什么用函數調用中的執行上下文代碼如下
概念 一、執行上下文: (Execution Context,縮寫 EC)
console.log("EC0"); function funcEC1(){ console.log("EC1"); function funcEC2(){ console.log("EC2"); var funcEC3 = function(){ console.log("EC3"); }; } funcEC2(); } funcEC1();
在Javascript引擎解析上述代碼時在執行函數會依次將其添加到棧(Stack)中,即(ECO(Global),EC1,EC2),如下圖所示:
執行上下文分為:全局執行上下文和函數執行上下文
二、變量對象:(Variable Object VO)是一個抽象的概念中的‘對象’,它用于存儲執行上下文中的:
變量
函數聲明
函數參數
var a = 10; function test(x){ var b = 20; } test(30);
Javascript引擎會將其解析為:
VO(globalContext) = { a: 10, test: }; VO(test functionContext){ x:30, b:20 };
在瀏覽器中全局上下文變量對象為window,而在nodejs中全局上下文變量對象為global。
當js代碼運行前,在全局執行上下文中(瀏覽器)中就會默認添加一些變量,
如:Math,String,isNaN,window,所以在調用代碼時:
String(10); //[[global]].String(10) window.a = 10; //[[global]].window.a = 10 this.b = 20; //[[global]].b = 20三、函數中的激活對象:(Active Object AO)
與變量對象一樣,即(VO(functionContext) === AO);
只不過AO多了一個變量,為arguments:
arguments = { callee, length, properties-indexes };
這個可選擇性忽略,沒什么用.
函數調用中的執行上下文代碼如下:
function test(a, b){ var c = 10; function d(){} var e = function _e(){}; (function(){})(); b = 20; } test(10);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79685.html
摘要:什么是中的調用棧調用棧就像是程序當前執行的日志。當函數執行結束時,將從調用棧中出去。了解全局和局部執行上下文是掌握作用域和閉包的關鍵。總結引擎創建執行上下文,全局存儲器和調用棧。 原文作者:Valentino 原文鏈接:https://www.valentinog.com/blog/js-execution-context-call-stack 什么是Javascript中的執行上下文...
摘要:深入系列第七篇,結合之前所講的四篇文章,以權威指南的為例,具體講解當函數執行的時候,執行上下文棧變量對象作用域鏈是如何變化的。前言在深入之執行上下文棧中講到,當代碼執行一段可執行代碼時,會創建對應的執行上下文。 JavaScript深入系列第七篇,結合之前所講的四篇文章,以權威指南的demo為例,具體講解當函數執行的時候,執行上下文棧、變量對象、作用域鏈是如何變化的。 前言 在《Jav...
摘要:深入系列第三篇,講解執行上下文棧的是如何執行的,也回答了第二篇中的略難的思考題。 JavaScript深入系列第三篇,講解執行上下文棧的是如何執行的,也回答了第二篇中的略難的思考題。 順序執行? 如果要問到 JavaScript 代碼執行順序的話,想必寫過 JavaScript 的開發者都會有個直觀的印象,那就是順序執行,畢竟: var foo = function () { ...
摘要:執行上下文當代碼運行的時候,運行代碼的環境形成了執行上下文,執行上下文決定代碼可以訪問哪些變量函數對象等。我們將執行上下文簡單視為運行當前代碼的,我們知道作用域分為和。完成后,其執行堆棧將從堆棧中刪除,將控制權交給全局執行上下文。 我們通常將 JavaScript 歸類為動態或解釋執行語言,但實際上它也是一門編譯語言,它有自己的編譯器形式,運行在 JavaScript 引擎中。 每個 ...
摘要:深入系列第八篇,介紹理論上的閉包和實踐上的閉包,以及從作用域鏈的角度解析經典的閉包題。定義對閉包的定義為閉包是指那些能夠訪問自由變量的函數。 JavaScript深入系列第八篇,介紹理論上的閉包和實踐上的閉包,以及從作用域鏈的角度解析經典的閉包題。 定義 MDN 對閉包的定義為: 閉包是指那些能夠訪問自由變量的函數。 那什么是自由變量呢? 自由變量是指在函數中使用的,但既不是函數參數也...
摘要:執行上下文和執行棧是中關鍵概念之一,是難點之一。理解執行上下文和執行棧同樣有助于理解其他的概念如提升機制作用域和閉包等。函數執行完成,函數的執行上下文出棧,并且被銷毀。 前言 如果你是一名 JavaScript 開發者,或者想要成為一名 JavaScript 開發者,那么你必須知道 JavaScript 程序內部的執行機制。執行上下文和執行棧是JavaScript中關鍵概念之一,是Ja...
閱讀 3228·2021-11-17 09:33
閱讀 3302·2021-11-15 11:37
閱讀 2968·2021-10-19 11:47
閱讀 3216·2019-08-29 15:32
閱讀 1019·2019-08-29 15:27
閱讀 1539·2019-08-29 13:15
閱讀 943·2019-08-29 12:47
閱讀 2037·2019-08-29 11:30