概念回顾:JS执行上下文

微信扫一扫,分享到朋友圈

概念回顾:JS执行上下文

快速导航

执行上下文

什么是执行上下文

执行上下文就是在执行前对当前可执行代码的一些环境的配置,如:this指向,词法环境,变量环境等生成。

可执行代码

上面提到可执行代码,估计大家都会有疑惑:我每天写的代码不都是可执行的吗?难道每行代码都有一个全局上下文?
其实不是的。

因为JS引擎在执行不是以行为单位执行的,而是以
为单位进行执行。所以在运行程序时,JS引擎会将代码分成一段一段的进行执行。这里面的每一段便是 可执行代码

可执行代码分为三种:全局代码、函数代码以及eval函数。

因此执行上下文也有三种:

调用
调用

注:eval函数虽然功能强大,但有一定的安全风险,所以请少用。

注意:函数执行上下文一定是在调用的时候才生成

执行栈

上面我们大致的讲了下执行上下文及执行上下文的种类,接下来讲讲执行栈。

首先为什么要有执行栈?答案是为了方便管理上面可执行代码的执行顺序。
在上面执行上下文中,我们发现了JS引擎是分段执行的,每一个段都有至少有一个执行上下文,那么这么多执行上下文,如何保证程序执行的时候,每一个段都准确对应他的执行上下文,而不发生混乱。为此JS引擎有了一个栈(FILO),这个栈就是 执行栈

那么执行栈是如何工作的呢? 当我们执行程序的时候。
首先遇到的便是全局代码,因此首先便是创建一个全局执行上下文,压入执行栈底。
然后遇到函数 调用
,便为该函数创建一个函数可执行上下文压入执行栈,遇到eval函数调用便创建一个eval函数执行上下文压入执行栈。当函数执行完毕,就会将该函数的执行上下文从执行栈里弹出,并销毁。因此全局上下文总是在程序执行完之后才才从执行栈弹出,执行栈也是在程序执行完之后才清空。

总结

本文主要就执行上下文的定义及种类,以及执行上下文的管理–执行栈做了简单讲述。执行上下文在日常工作中会主动用到的也不多,但了解之后能够减少你对于函数执行的一些迷惑。

最后内容难免出错,欢迎指正,交流

微信扫一扫,分享到朋友圈

概念回顾:JS执行上下文

Node.js+Redis实现消息队列的最佳实践

上一篇

asp.net core 3.1 自定义中间件实现jwt token认证

下一篇

你也可能喜欢

概念回顾:JS执行上下文

长按储存图像,分享给朋友