JS高级——词法作用域

作用域

1、js中没有块级作用域

2、如果有块级作用域,那么下面代码将会是undefined undefined

<script>
    for (var i = 0; i < 10; i++) {
        var num = i;
    }
    console.log(i);//10
    console.log(num);//9
</script>

词法作用域

1、就是在代码写好的那一刻,变量的作用域就已经确定了,这种作用域,就是所谓的词法作用域

2、和词法作用域相对的叫动态作用域 ,js中是词法作用域不是动态作用域

3、在JS中唯一能产生作用域的是函数

<script>
    //代码写好的那一刻,变量的作用域就已经确定了
    //作用域要么在函数中,要么在全局,因为没有块级作用域
    var x = 100;

    function f() {
        alert(x);
    }

    function f1() {
        var x = 1;
        f();
    }

    function f2() {
        x = 1;
        f();
    }

    f1();//100
    f2();//1

</script>

在写下代码的那一刻作用域就确定了,f()函数中的x,永远会去找全局变量中x

词法作用域规则

1、函数允许访问函数外的数据

2、整个代码结构中只有函数可以限定作用域

3、作用域规则首先使用提升规则分析

4、如果当前作用域中有了该变量, 就不考虑外面的同名变量

参考:https://www.cnblogs.com/foodoir/p/5977950.html

原文地址:https://www.cnblogs.com/wuqiuxue/p/8341122.html