作用域链的一些小理解

函数中的变量作用域链

首先看一段代码;

<script type="text/javascript">
        function ad(){
            var a=3;
            ap();
            function ap(){
            console.log(a)
            }
        }
        ad();//输出的结果为3;
    </script>

以上代码并不想去考虑 这个边量a 在做用域链中的位置 我们只讨论他是否在作用域链内部,根据结果a是在ap的函数链内部下面图解a的位置

ap.png


再看零一段代码

        var a='window';
        function ad(){
            var a=3;
            ap();   //这个时候输出的结果为 window
        }
        ad();
        function ap(){
            console.log(a)
            }

那这时候有人会问了 调用ap的时候不是ad函数的内部吗为什么返回的值不是a


ap.png

根据上面的图可清晰的认识到ad 和ap是同属于window下的方法ap无权访问ad内的变量所这里的a的值为‘window’;

那么看另外一段代码

        var a='window';
        function ad(){
            var a=3;
        function ap(){
            console.log(a)
            }
        }
        ad();
        ap();//报错;
        

显而易见之二段代码是在外部想要访问函数ad内部的 函数ap显然这是不现实的 因为函数ap在ad内部相当于一个局部变量。这里要注意的石函数的声明提前也只能在他的所在的作用域内提前并不能越级提前到他的作用域外部;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容