美文网首页
JS作用域链

JS作用域链

作者: 饥人谷_张晓霞 | 来源:发表于2019-03-29 00:30 被阅读0次

    1. 作用域

    JS中的变量和函数并不总是可用的,有其使用的范围,这就是作用域。

    • JS的作用域靠函数形成,函数内声明的变量是局部变量,在函数外不可访问。
    • 不在函数内声明的变量是全局变量。且函数内省略var声明的变量也是全局变量。

    2. 作用域链

    作用域链决定了哪些数据能被函数访问

    举个例子
    var a = 1;      //全局变量
    function fn1(){    //父函数
       function fn2(){   //子函数
         console.log(a);
       }
       function fn3(){    //子函数
         var a = 4;     //局部变量
         fn2();
       }
       var a = 2;       //父函数的局部变量对子函数可见
       return fn3;
    }
    var fn = fn1();        //调用函数fn1
    fn();    //2
    
    

    函数在执行过程中,先从自己内部找变量,如果找不到,再从创建当前函数所在的作用域中查找,即层层向上往父级作用域中查找变量。沿着作用域链找变量。

    函数fn1返回函数fn3的值,fn3调用了fn2,fn2要求输出变量a的值,函数fn2内部并没有定义变量a,fn2的父函数是fn1,所以往父函数fn1的作用域中查找,由代码可见,fn1中有var a =2; 所以找到fn2输出变量a的值为2。这就是最终的结果。

    相关文章

      网友评论

          本文标题:JS作用域链

          本文链接:https://www.haomeiwen.com/subject/dlohbqtx.html