做用域链及其相关概念

    //做用域链
    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链条

定义: 函数

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

特色:外部环境变量,能够给内部环境使用code

 

做用域链的做用对象

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

函数能够“先使用,后声明”,缘由是函数有预加载过程,本质仍是函数声明在前,使用在后作用域

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

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

2.内部环境能够访问外部环境的变量,反之否则get

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

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

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

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

 

活动对象 AO Active Objectconsole

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的成员信息

  局部变量:其在必定范围内能够看作是"全局变量",其在本环境,内部环境,内部深层环境均可以被访问