JavaScript核心概念归纳整理- 作用域、作用域链

加油吧!Davidvivi


<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script>       
        //变量的作用链:子函数可以访问父函数的变量,父函数不能访问子函数的局部变量       
        var num = 1;
        //父函数
        function demo(){            
            console.log(num);//1
            var age = 18;            
            //子函数
            function test(){                
                var sex = '女';
                console.log(age);//18
                console.log(sex);//女            
            }
            test();
            //sex变量是test函数的局部变量
            console.log(sex);//不行
        }
        demo();
        //age变量的作用域只是在demo函数内部
        console.log(age);//不行的。
    </script>
</body>
</html>

  作用域、作用域链  


说到作用域,就必须结合变量的访问权限来说明。一个变量的作用域就是在程序中定义变量的区域,它规定了执行程序如何对变量进行查找,也就是确定当前的执行代码对变量的访问权限。在ES5中有全局作用域、函数作用域、eval作用域,在ES6中新增了块级作用域。


作用域链,则需要结合函数的嵌套来说明。当定义一个函数时,它实际上创建了一个作用域节点,该节点上存储着当前作用域中的局部变量,并且该节点会挂载在作用域链的底端。在该函数中嵌套定义另一个函数时,同样会创建另一个函数作用域的节点,该节点同样也存储着当前函数作用域中的局部变量,在作用域链中会将该节点挂载在外层函数的节点之下。所以在进行变量访问时,会从自身节点开始查找,如果未找到变量的对应值,则会继续查找上一个节点。而由这一系列节点所串联起来的链就是我们所说的作用域链。


JavaScript中的函数采用静态作用域,也称词法作用域。当在执行函数调用时,不管何时何地执行函数,其中的变量在函数定义时就已经决定了,函数会从自身作用域节点开始,沿着作用域链向上访问变量的值。


注意:作用域链的顶端是全局作用域,作用域链在函数定义时就已经创建了。


打赏,支持一下

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by WEIXIA.XIN,学的不仅是技术,更是梦想!!!

Davidvivi博客
请先登录后发表评论
  • 最新评论
  • 总共 0条评论