摘要:当代码运行前,在全局执行上下文中浏览器中就会默认添加一些变量,如,所以在调用代码时三函数中的激活对象与变量对象一样,即只不过多了一个变量,为这个可选择性忽略,没什么用函数调用中的执行上下文代码如下
概念 一、执行上下文: (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);
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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...
阅读 3150·2021-11-17 09:33
阅读 3260·2021-11-15 11:37
阅读 2861·2021-10-19 11:47
阅读 3123·2019-08-29 15:32
阅读 968·2019-08-29 15:27
阅读 1450·2019-08-29 13:15
阅读 845·2019-08-29 12:47
阅读 1986·2019-08-29 11:30