做用域链

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

相关文章
相关标签/搜索