欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javascript--作用域解析

程序员文章站 2022-09-04 16:47:10
javascript -- 作用域 作用域: [[scope]] 每一个javascript函数都是一个对象,有些对象我们是可以访问的,但是有一些, 我们访问不了,访问不了的那部分一般是给javas...

javascript -- 作用域

作用域:

[[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

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