JS基本变量之间的区别与联系

1、JS基本变量

1-1 全局变量和局部变量

​ 在仅有var时,分为全局变量和局部变量

  • 全局变量–var在函数外声明的变量–在任何位置都能进行访问
  • 局部变量–var在函数内声明的变量–在被声明的函数内进行访问

1-2 块作用域

​ 使用let关键字声明拥有块作用域的变量

  • 在块{ }中声明的变量在快外无法访问

    var  x = 10;
    //此时x = 10
    {
          
            
      let x = 2;
      // 此时x = 2
    }
    //此时x = 10
    

1-3 var和let的区别

  1. 循环作用域中

    1. var: 声明了一个全局变量,此后i值会被后面值进行覆盖而发生相应的改变

      for (var i = 0; i < 10; i++) {
              
              
      	setTimeout(() => {
              
              
              console.log(i); //输出10个10
          }, 1000);
      }
      
    2. let: 声明一个局部变量,块级作用域。

      for (let i = 0; i < 10; i++) {
              
              
              setTimeout(() => {
              
              
                  console.log(i); 
                  //输出0,1,2,3,4,5,6,7,8,9
              }, 1000);
          }
      
      1. 当前的i仅仅在本轮的循环中有效,每一次循环的值都是不同的局部变量
      2. 每一次循环的变量都是重新声明的,如何得知上一次循环的值?—答:JS的引擎内部会记住上一轮循环的值,初始化本轮变量时在上一轮的基础上进行计算
  2. 函数作用域

    1. 相同:均含有函数作用域、全局作用域
    2. 不同
      1. var定义的全局变量属于window对象
      2. let定义的全局变量不属于window对象
  3. 重新声明

    1. var可以重新声明同一个变量(任何位置均可)

    2. let在相同的作用域和块中不可以重新声明同一变量,在不同的作用域和块中可以let进行重新声明

    3. let和var不可以同时声明同一个变量(相同的作用域和块)

  4. 提升变量

    1. var声明的变量会进行提升

      // 在此处,您可以使用 carName
      var carName;
      
    2. let声明的变量不会进行提升

      // 在此不可以使用 carName
      let carName;
      

1-4 Const

  1. const基本理解

    1. const定义的变量不能进行重新赋值,与let相似。
    2. const声明变量时需要和赋值同时进行:const PI = 3.14159265359;
  2. 可以改与不可改

    1. 不可以改

      1. 原始值不可以进行修改。原因:const不是真正的常数(没有定义常量值,但是定义了对值的常量引用),我们不能改变原始值但是可以改变常量对象的属性
      2. 不可以为常量对象赋值
      3. 不可以为常量数组赋值
    2. 可以改

      1. 常量对象,可以修改常量对象的属性

        // 创建 const 对象:
        const car = {
                  
                  type:"porsche", model:"911", color:"Black"};
        // 更改属性:
        car.color = "White";
        // 添加属性:
        car.owner = "Bill";
        
      2. 常量数组,可以更改常量数组的元素

        // 创建常量数组:
        const cars = ["Audi", "BMW", "porsche"];
        // 更改元素:
        cars[0] = "Honda";
        // 添加元素:
        cars.push("Volvo");
        
  3. 重新声明

    1. 同一作用域或块

      1. 已有的var、let变量不可以重新声明或赋值给const
      2. 已有的const变量不可以重新声明或赋值给var或let
    2. 不同的作用域或块

      1. const重新声明是可以的

        const x = 2;    // 允许
        {
                  
                   const x = 3;   // 允许}
        {
                  
                   const x = 4;   // 允许}
        
  4. 提升

    1. var会提升
    2. const变量和let变量不会进行提升,不能在声明之前进行使用

猜你喜欢

转载自blog.csdn.net/qq_45829293/article/details/120926932