JavaScript基础之速通const,let,var

762 阅读3分钟

JavaScript基础之速通const,let,var

发展

首先 我们要先了解ECMAScript(简称ES),是由ECMA International 组织标准化的一种脚本语言规范,而 JavaScript 是 ECMAScript 规范的一种实现。在ES6之前,我们并没有const 和 let这两个用法,在2015年后ES6的发布,我们才有了const 和 let 这两个用于声明变量的关键字。因此现在ES6是我们JavaScript语言的当下标准。

variable(变量)

首先我们来了解variable(代码中为var),他是JavaScript最初版本就存在的关键字,用于定义全局作用域中的变量。

函数作用域:使用var声明的变量在函数内部声明时,它的作用域是整个函数体,即使在块状作用域中 (如{}) 声明依然如此。

变量提升:var 声明的变量会被提升至其所在作用域的顶部,并被初始化为 undefined。这意味着你可以在声明变量之前就使用它,但这通常会导致难以调试的错误。

       console.log(x); // 输出: undefined
       var x = 10;

可重复声明:同一作用域中可多次声明同一个变量名,只是后面的声明会将前面的声明覆盖。

      function sayHello() {
         //变量
           var name="小明";
            return "Hello"+name;
      }

          console.log(sayHello())

此时的输出为"Hello小明"

      function sayHello() {
        //变量
        var name="小明";
        //重复声明则覆盖
        var name="小红";
        return "Hello"+name;
      }
       console.log(sayHello())

但在声明变量小明的下方加一行( var name="小红")此时声明了同一个变量名的另一个变量,则将前面的变量“小明”给覆盖掉 结果变成了“Hello 小红"。

let(变量)

let 关键字是在ES6版本后才出现,旨在解决var关键字存在的一些问题(作用域与变量提升方面)。

有些同学可能会疑惑,var 和 let 的区别体现在哪些地方呢?

首先,最明显的地方就是作用域,let作用于块级作用域(一般指{}内),而var作用于全局作用域。

 if (true) {
     let x = 10;
     console.log(x); // 输出 10
  }
     console.log(x); // ReferenceError: x is not defined

若 输出语句在{ }外,系统则会报错,因为 x 只在上面的{ }中内有效。

变量提升(Hoisting):let声明前访问会报错,而var则是初始化为undifined。

 console.log(y); // 抛出 ReferenceError: Cannot access 'y' before initialization
 let y = 20;

let不允许在同一个作用域内重复声明同一个变量。

           if (true) {
              let x = 10;
            // let x = 20; // SyntaxError: Identifier 'x' has already been declared
             console.log(x); // 输出 10
             }

在let中加了第三行代码则会报错

但我们可以这样改变

   if (true) {  
      let x = 10;
      x = 20; // 合法操作,只是重新赋值
      console.log(x); // 输出 20
     }

不用let声明,直接重新赋值进去

const(常量)

const 关键字也是在ES6版本后才出现的关键字,有利于代码可读性和安全性,建议大写。

初始化:在使用const声明变量时,必须立刻赋值,不能延迟。

     const a; // SyntaxError: Missing initializer in const declaration
     const b = 10; // 正确

不可重新赋值:一旦用const声明了一个变量,就不能再赋值给这个变量。

     const c = 20;
     // c = 30; // TypeError: Assignment to constant variable
     console.log(c); // 输出 20

块级作用域:const也只作用域块级作用域,只在它的代码块{ }中有效。

    if (true) {
    const d = 40;
    console.log(d); // 输出 40
   }
 // console.log(d); // ReferenceError: d is not defined

暂时性死区(TDZ):在声明之前访问会报错。

        if (true) {
   console.log(e); // ReferenceError: e is not defined
   const e = 50;
   console.log(e); // 输出 50
}

但const声明值能否被该改变呢?答案是可以被改变,但不可以重新赋值和改变数据类型。

  const person = { name: 'Alice', age: 30 };
  person.age = 31; // 合法操作,修改对象的属性
  console.log(person); // 输出 { name: 'Alice', age: 31 }
 // 但不能重新赋值
// person = { name: 'Bob', age: 25 }; // TypeError: Assignment to constant variable

这就是JavaScript中var,let,const三种关键字的特点与用法,希望大家能从中收获到一些东西