JS高级——作用域链

Posted 站错队了同志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS高级——作用域链相关的知识,希望对你有一定的参考价值。

基本概念

1、只要是函数就可以创造作用域

2、函数中又可以再创建函数

3、函数内部的作用域可以访问函数外部的作用域

4、如果有多个函数嵌套,那么就会构成一个链式访问结构,这就是作用域链

<script>
    //f1--->全局
    function f1() {
        //f2--->f1--->全局
        function f2() {
            //f3---->f2--->f1--->全局
            function f3() {
            }

            //f4--->f2--->f1---->全局
            function f4() {
            }
        }

        //f5--->f1---->全局
        function f5() {
        }
    }
</script>

变量的搜索原则

1、首先在所在的作用域中查找

2、如果找到了 就直接使用

3、如果没有找到 就去上级作用域中查找

4、如果直到0级作用域链也就是全局作用域还没有找到,报错

在new Function中,在没有指定参数的情况下,函数中的Function对象作用域指示的又是全局

<script>
    var x= 123;
    function f(){
        var x = 100;
        //g.[[scope]]  == window
        var g = new Function("","alert(x)");
        g();
    }
    f();//结果为:123
</script>

 

以上是关于JS高级——作用域链的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript高级JavaScript的运行原理:V8引擎,JS代码执行原理,作用域和作用域链面试题

JS高级——函数执行作用域链内存结构图

JS高级——函数执行作用域链内存结构图

JS高级. 05 词法作用域变量名提升作用域链闭包

JS作用域作用域链

JS 作用域及作用域链