对作用域的理解

165 阅读1分钟

先对作用域进行一个基本的介绍

  • JavaScript的作用域 就是指变量能够访问到的范围

在ES5版本之前,javascript中只有两种作用域:全局作用域函数作用域

  • 全局作用域 就是挂载在window对象下的变量

    所以在网页的任何位置都可以访问到这个全局变量

    并且不用关键字定义的变量也属于全局变量

    var num1 = 10; //全局变量
    function fn() {
        console.log(num1); //10
        num1 = 20;
        console.log(num1); //20
    }
    fn();
    console.log(num1);//20
  • 函数作用域 是在当前函数内部声明的变量

    这个变量除了这个函数内部,其他的地方都不可以去访问

    function fn() {
        var num1 = 10; //局部变量
        console.log(num); //10
    }
    fn();
    console.log(num1); // num2 is not defined 报错:找不到 num变量

~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~

在SE6版本出现后,就出现了块级作用域

新增了一个let关键词,使用let关键词定义的变量只能在块级作用域中被访问

在JS编码过程中,像for循环、if语句后面的{ ... }这里面所包含的就是块级作用域

console.log(num); // num is not defined
if(true){
    let num = 123;
    console.log( num ); //123
}
console.log(num); // num is not defined

因为在if语句中使用let定义了num变量,只有if语句的花括号中是属于num变量的块级作用域,所以在其他地方无法找到num变量