做用域鏈及其相關概念

    //做用域鏈
    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的成員信息

  局部變量:其在必定範圍內能夠看作是"全局變量",其在本環境,內部環境,內部深層環境均可以被訪問

相關文章
相關標籤/搜索