关于JS中的执行上下文和执行上下文栈
发布日期:2021-05-12 21:17:46 浏览次数:16 分类:精选文章

本文共 628 字,大约阅读时间需要 2 分钟。

关于JS中的执行上下文

写在前面:如果此篇博客中有任何错误的地方,欢迎大家的指正!让我们共同进步!

如果觉得这篇博客有用就点赞+收藏+关注三连吧!


变量提升函数提升的内容中,就让我们产生一个疑惑——“这两个提升是怎么来的?”,这就要用我们的执行上下文来解释了。

首先让我们了解一下几个基本概念,代码分类主要按照位置,分为两大类——全局代码及函数(局部)代码。

进而使得JS中的执行上下文的分类也有两种——全局执行上下文以及函数执行上下文

在这里插入图片描述

注意:
①关于执行上下文对象的理解
这里的执行上下文对象都是表意上的对象(形似对象那种各种数据的打包的对象思想,但是其实质还是在栈内存中进行分配存储);
②注意区分函数对象函数执行上下文对象
函数执行上下文对象只有在调用函数的时候才创建,而函数对象则是会在全局代码执行前提前在堆内存中产生这个对象。


我们举一个例子来说明全局执行上下文。

函数执行上下文举例代码如下:
在这里插入图片描述
在这里插入图片描述


区分同名的函数提升和变量提升

在这里插入图片描述

执行结果如下:在这里插入图片描述
小细节:同样的名字,函数提升的优先级高于变量提升的优先级,因此显示的是f1(),而不是’housting’,(有的地方写的是函数提升现已变量提升)

为了更好的理解这个现象的原因,我们来看一个例子

在这里插入图片描述

分析:

实际执行如下:

var a;function a(){};console.log(typeof a);因此为a这个时候为 ‘function’

执行上下文栈

在这里插入图片描述

执行过程解析:
在这里插入图片描述


执行栈的理解如下:

在这里插入图片描述

上一篇:关于JS中作用域与执行上下文的区别
下一篇:JavaScript中的变量提升和函数提升的浅显理解

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月10日 09时59分29秒