javascript -- 作用域

本文详细解析了JavaScript中的作用域概念,包括作用域链、执行期上下文及其工作原理。通过实例说明了函数如何在不同作用域中访问变量,揭示了内部函数对外部变量的访问权限。

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

作用域:

[[scope]]

每一个JavaScript函数都是一个对象,有些对象我们是可以访问的,但是有一些, 我们访问不了,访问不了的那部分一般是给JavaScript引擎存取的。[[scope]]指的就是我们所说的作用域,其中存储了运行期上下文的集合。

作用域链

[[scope]]中存储的执行器上下文对象的集合,这种集合呈链式连接,称之为作用域链,

执行期上下文(GO AO)

当函数在执行前会进行预编译,预编译也就是就可以成为执行期上下文,每一个执行期上下文都是独一无二的,多次调用一盒函数会导致创建多个执行期上下文,当函数执行完毕,执行期上下文就会被销毁,也就是说,执行期上下文是临时文件.,函数执行完了,他就没了.

注意点

AO在作用域链的顶端

查找变量

查找变量的时候,会从作用域链的顶端依次向下查找,如果在函数体里面开始找的话,会先在当前的函数体里开始寻找,也就是 AO ,然后再查找 GO .

通俗说法

函数作用域就是等于 一个小镇子里面,有好多好多的小房子,每一个小房子都是独立的。

作用域链等于是 你爷爷的儿子是你爸爸你爸爸的儿子是你,你可以去问你爸爸要钱,你可以去问你爷爷要钱,但是你爸爸不能问你要钱,你爷爷更加不可能问你要钱,在函数中,被包含在最里面的那个函数权限是最大的,越往外面,权限越小,越往里面,权限越大。

function a(){
    function b(){
        function c (){

        }
        c();
    }
    b();
}
a();

作用域链解释:
a defined a.[[scope]] –> 0 : GO
a doing a.[[scope]] –> 0: a AO
–> 1 : GO

b defined a.[[scope]] –> 0 : a AO
–> 1 : GO
b doing a.[[scope]] –> 0: b AO
–> 1 : a AO
–> 2 : GO

c defined a.[[scope]] –> 0 : b AO
–> 1 : a AO
–> 2 : GO
c doing a.[[scope]] –> 0: c AO
–> 1 : b AO
–> 1 : a AO
–> 2 : GO

总结:里面的能够访问并且改变外面的,外面的不能访问,执行里面的。里面的权利最大,外面的权利最小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值