JS作用域

59 阅读2分钟

作用域

1.变量使用使用区间的,变量不是说名之后在哪里都可以用,他有一个使用的范围,我们把这个范围叫做 作用域

作用域分为两种

1,全局作用域

JS 给我们提供了一个叫 window 的全局作用域,,可以理解为 整个 script 标签内的作用域,就是全局作用域 * 全局变量都会挂载到 window 对象上

2.局部作用域

在JS中,有 且只有 函数能够创建 局部作用域(函数作用域),局部作用域开始和结束位置,就是函数代码段的开始和结束位置
在局部作用域内(函数作用域)内 声明的变量叫做局部变量
局部变量 不会挂载到 window 对象上

var num = 100;
       var aaa = 10000;
       /**
        * 根据规则,这里是 script 标签内部,所以是全局作用域, 这个 num 可以叫做全局变量
        * 
       */

       console.log(num); //100
       console.log(window); //100
       console.log(aaa); //10000


       var name = '飞飞'
       //因为全局作用域 window 上有个属性叫做 name ,所以我们的全局变量,要避免起名的时候叫做 name ,尤其是开发的时候
       console.log(window); //?

       function fn(){
        var num = 100;
        console.log(num);
        console.log(window);
       }
       fn()


       var num = 100 // 李四
       var num = 10000 // 张三
       console.log(num); //李四以为

       var num = 100  //

       function fn() {
        var num = 10000;
        console.log(num);

       }

       console.log(num);

作用域链

什么是作用域链

变量的访问规则

变量访问会 先在当前作用域内查找,,找到拿来直接用,如果没有找到,会去上层作用域查找,找到直接用
如果上层作用域没找到,会继续去上层作用域 的 上一层作用域内查找,找到直接用,没找到会继续往上
如果找到了全局作用域内 还是没有变量,那么就会报错 unm is not defined

变量的赋值规则

变量赋值会 先在当前