js高级——作用域链

1.作用域链:只有函数可以制造作用域结构,所以只要是代码就至少有一个作用域(即全局作用域)
(1)凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中又可以诞生一个作用域。将这样的所有作用域列出来,可以有一个结构:函数内指向函数外的链式结构,就称作作用域链
(2)只要是函数就可以创造作用域
        函数中又可以再创建函数
        函数内部的作用域可以访问函数外部的作用域
        如果有多个函数嵌套,那么就会构成一个链式访问结构  -->  作用域链
    //f1 --> 全局
    function f1 (){
        //f2 --> f1 --> 全局
        function f2 (){
            //f3 --> f2 --> f1 --> 全局
            function f3 (){

            }
            //f4 --> f2 --> f1 --> 全局
            function f4 (){

            }
        }
        //f5 --> f1 --> 全局
        function f5 (){

        }
    }

2.绘制作用域链图
function f1 (){
    function f2 (){
     }
}

var num = 456 ;
function f3 (){
    function f4 (){
    }
}
(1)绘制作用域链的步骤
    ·看整个全局是一条链,即顶级连,记为0链
    ·看全局作用域中有什么变量和函数声明就以方格的形式绘制到0级链上
    ·再找函数,只有函数可以限制作用域,因此从函数中引入新链,标记为1级链
    ·然后在每一个1级链中再次往复以上的行为
(2)变量的访问规则
    ·首先看变量在第几条链上,在该链上看是否有变量的定义与赋值,如果有就直接使用
    ·如果没有到上一级链上找(n - 1级链),如果有就直接用,停止继续查找
    ·如果还没有再次网上查找,知道全局链(0级),如果还是没有就是is not defined
    ·注意:同级的链不可混合查找

3.注意点
(1)并不是在函数内部写了变量,这个变量就属于这个函数的作用域,而是必须使用var关键字来声明该变量,这个变量才会属于这个作用域
(2)声明函数时的函数名,其实也是一个变量名,可以通过这个变量名来给其赋值(不管是赋什么值)
(3)函数在声明出来的时候,里面的代码不会执行,只有在调用的时候代码才会执行
(4)变量搜索原则
        ·首选在当前链上找
            ·如果有,就停止查找
            ·如果没有,就在n-1级上查找(在函数内部允许访问定义在函数外部的变量)
        ·如此循环往复直到0级链
            ·如果找到,就结束查找,直接获得该链上变量的数据
            ·如果还没有就抛出异常






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值