JS函数作用域

本文解析了JavaScript中函数作为对象的概念,详细介绍了作用域及其链式结构如何工作,包括函数定义时捕获的环境、执行上下文的创建与销毁过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function f(){}

函数也属于对象,叫做函数对象,是对象就有属性,比如f.name;f.age,还有一些我们用不了的属性,仅供javascript引擎使用,[[scope]]就是其中一个,[[scope]]就是我们所说的作用域,里面存储了运行其上下文的集合

[[scope]]随着函数产生而产生

[[scope]]中存着运行其上下文的对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链

运行其上下文:当函数运行时,会创建一个称为执行其上下文的内部对象。一个执行其上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会生成多个执行其上下文,当函数执行完毕,它所产生的上下文被销毁。



函数a被定义时,存的是GO,准确点说是所在其环境的上下文


a函数执行时,产生一个AO,放在最顶端,同时也会定义b函数


b函数是在a函数里面,所以捡a的现成的作用域。因为b是在a里面定义的,b所在的环境是a给的。b能访问a的作用域和全局作用域,而a不能访问b的作用域


当b执行完后,它的执行上下文被销毁,也就是说它自己的AO被销毁,scope chain 里的0不再指向AO,回归到被定义时的状态,等待下次调用。

在这个函数中,b执行完后,a也执行完了,a的执行上下文也被销毁,它的scope chain里面的0也不再指向自己的AO,b函数彻底没了,a回归到被定义时的状态,等待下次调用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值