作用域链经典问题

<script>
        function fn1(){
            var i="a";
            function fn2(){
                i="b";
                function fn3(){
                    i="c";
                }
                fn3();
            }
            fn2();
            console.log(i);
          }   
        fn1();
        
    </script>

结果:c

解析如下:牢记作用作用域链四条原则

1、 当对一个变量产生引用时,要遵循作用域链原则。尝试引用一个变量,先在当前作用域寻找该变量的声明语句(var 变量名)。有,直接使用该变量。

2、 如果没有,继续向上一级作用域寻找var声明语句。有,直接使用

3、 如果还是没有,继续向上一级作用域寻找var声明语句。有,直接使用

4、周而复始,直到查询到全局作用域,依然没有var声明语句,系统会隐式(自动)地创建该变量的声明语句

 

posted @ 2018-11-23 19:51  yunhenX  阅读(188)  评论(0编辑  收藏  举报