js作用域

77 阅读2分钟

作用域

变量使用区间,变量不是说声明变量之后在哪里都可以使用,他有使用范围叫做作用域

作用域分为两种

  1. 全局作用域
    js给我们提供了一个叫做window的全局作用域,可以理解为整个script标签内的作用域,就是全局作用域
    全局变量会挂载到window对象上
  2. 局部作用域
    在js中有且只有函数能够创建局部作用域
    在局部作用域(函数作用域)内,声明的变量叫做局部变量
    局部变量不会挂载到window对象上
        var num = 100
        function fn() {
            var num = 10000
            console.log(num);
        }
        fn()
        console.log(num);

作用域链

定义

  在查找变量时,会先在当前作用域内查找,找到就用,没找到去上层查找,一直会查找到顶层作用域(全局——window)
  在查找过程中,我们把逐层向上的一层一层查找,所构成的一个链条 叫做作用域链(实际上没有作用域链)

变量的访问规则

  变量访问会 先 在当前作用域内查找,找到拿来直接用,如果没有找到,会去上层作用域查找,找到拿来直接用,一直往上层作用域找,直到找到全局作用域,还没有变量,就会报错。

变量的赋值规则

  变量赋值会 先 在当前作用域内查找,找到直接赋值,如果没有找到,会去上层作用域查找,找到直接赋值,如果上层作用域内没找到,一直往上层作用域找,直到找到全局作用域,还没有找到变量,那么会直接将变量定义在当前作用域(全局作用域)内。<赋值了 没定义>

*重点: 作用域链:只会向上查找,不会向下

        function fn() {
            function fn1() {
                a = 1000
            }
            fn1()
        }
        fn()
        console.log(a);