函数高级③ -- (执行上下文栈、作用域与作用域链)

网友投稿 644 2022-08-31

函数高级③ -- (执行上下文栈、作用域与作用域链)

函数高级③ -- (执行上下文栈、作用域与作用域链)

文章目录

​​执行上下文栈​​​​作用域​​​​作用域与执行上下文​​​​作用域链​​

执行上下文栈

在全局代码执行前, js引擎就会创建一个栈来存储管理所有的执行上下文对象在全局执行上下文(window)确定后, 将其添加到栈中(压栈)在函数执行上下文创建后, 将其添加到栈中(压栈)在当前函数执行完后,将栈顶的对象移除(出栈)当所有的代码执行完后, 栈中只剩下window

例如:

注:函数只有在调用的时候,才会创建函数的执行上下文。定义时不会创建。

作用域

①理解

就是一块"地盘", 一个代码段所在的区域它是静态的(相对于上下文对象), 在编写代码时就确定了

②分类

全局作用域函数作用域没有块作用域(ES6有了)

③ 作用

隔离变量,不同作用域下同名变量不会有冲突

例如:

在哪个作用域就现在哪个作用域找,找不到就往外找。

作用域与执行上下文

区别1

全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了。而不是在函数调用时全局执行上下文环境是在全局作用域确定之后, js代码马上执行之前创建函数执行上下文是在调用函数时, 函数体代码执行之前创建

区别2

作用域是静态的, 只要函数定义好了就一直存在, 且不会再变化执行上下文是动态的, 调用函数时创建, 函数调用结束时就会自动释放

联系

执行上下文(对象)是从属于所在的作用域全局上下文环境==>全局作用域函数上下文环境==>对应的函数使用域

例如:

上图修正:全局上下文环境中应该是b=20

作用域链

①理解

多个上下级关系的作用域形成的链, 它的方向是从下向上的(从内到外)查找变量时就是沿着作用域链来查找的

②查找一个变量的查找规则

在当前作用域下的执行上下文中查找对应的属性, 如果有直接返回, 否则进入2在上一级作用域的执行上下文中查找对应的属性, 如果有直接返回, 否则进入3再次执行2的相同操作, 直到全局作用域, 如果还找不到就抛出找不到的异常

如上图输出结果:

4,3,2,报错(d is not define)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:大神是如何学习 Go 语言之浅谈 select 的实现原理
下一篇:Express②(路由)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~