做用域鏈

做用域鏈:
1級:查看當前做用域,若是當前做用域聲明瞭這個變量,就肯定結果
2級:查找當前做用域的上級做用域,也就是當前函數的上級函數,看看上級函數中有沒有聲明
3級:再查找上級函數的上級函數,直到全局做用域爲止
若是沒有找到,認爲這個變量未聲明javascript

 

<script type="text/javascript">
    var dog = 1;  //全局
    function rainman(){  //2級
        var man = 2;
        function inner(){   //1級
            var innerVar = 4;
            alert(dog);  
        }
        inner();    //調用inner函數
    }
    rainman();    //調用rainman函數
</script>

  

解釋: alert(rain);
            ==>inner()       //咱們會在inner 這個函數查找是否聲明瞭變量,若是沒有找到,java

                                     咱們查找當前做用域的上級做用域,函數

                                    也就是當前函數的上級函數rainman函數
           ==>rainman()    //rainman函數體內沒有定義dog變量,再查找上級函數的上級函數,spa

                                     直到全局做用域爲止,在全局對象中咱們定義了dog = 1,對象

                                     所以最終結果會彈出'1'。
         ==>全局做用域blog

相關文章
相關標籤/搜索