作用域链及其相关概念

    //作用域链
    var title ="链条";
    function f1(){
        console.log("f1"+title);
        function f2(){
            console.log("f2"+title);
            function f3(){
                console.log("f3"+title);
            }
            f3();//f3链条
        }
        f2();//f2链条
    }
    f1();//f1链条

定义: 

变量在当前环境,内部环境,内部深层环境都其作用的现象形成了一个链条,这个链条就被称为变量的“作用域链”

特点:外部环境变量,可以给内部环境使用

 

作用域链的作用

1.变量必须“先声明,后使用”

函数可以“先使用,后声明”,原因是函数有预加载过程,本质还是函数声明在前,使用在后

    //变量必须"先声明。后使用 "
    //同名的函数和变量的执行有顺序问题

    var getInfo = "school";
    getInfo(); //itcast
    function getInfo(){
        console.log("itcast") //Uncaught TypeError: getInfo is not a function
    }

2.内部环境可以访问外部环境的变量,反之不然

    var  age = 20;
    function f1(){
        var height =170;
        console.log(age); //内环境,访问外环境 变量
    }
    f1();
    console.log(height);//外环境访问内环境变量(不允许)

3.变量的作用域是声明时决定的,而不是运行时

    var food = "milk";
    function f1(){
        console.log(food); //milk
    }
    function f2(){
        var food = "brand";
        f1();
    }
    f2(); 

函数是在全局声明的,而调用时在f2内部环境调用的,由此可以发现,变量的作用域是声明的时候决定的,而不是在运行时

 

活动对象 AO Active Object

1,js代码执行是有环境的

2,该环境定义了其有权访问的其他数据

3,环境有一个与之相关的活动对象AO

4,环境中所有的变量和函数都是活动对象的属性

5,全局环境是最外围的执行环境,活动对象是window对象

6,执行环境中的代码执行完毕后会被销毁

 

执行环境以及顺序优先级

 

 var height =175; //外部环境变量
    function f1() {
        var height = 165; //外部环境变量
        function f2(height) { //形参
            var height = 190;
            console.log(height);
            function height() { //本环境函数
                alert('skdjlks')
            }
        }

        f2(180);
    }
    f1();

 

 优先级  内部环境变量》》本环境函数》》》形参》》》 外部环境变量

 

 全局变量和局部变量

 全局变量:全局变量 其是活动对象 window的成员信息

  局部变量:其在一定范围内可以看做是"全局变量",其在本环境,内部环境,内部深层环境都可以被访问

 

  

 

posted @ 2018-12-26 11:20  无聊才读书  阅读(540)  评论(0编辑  收藏  举报