Javascript中的变量声明方式有哪些?它们之间有什么区别?

在 JavaScript 中,有 3 种变量声明方式:

  1. var:传统变量声明方式,ES5 中引入
  • 作用域为函数级
  • 可以在声明之前使用(变量提升)
  • 可以重新声明,后续声明不会报错

例如:

console.log(a); // 输出 undefined
var a = 1;   

function test() {
  var b = 1;
  {
    var b = 2;  // 这里不会报错,后续声明覆盖前者
  }
}
  1. let:块级作用域变量声明,ES6 中引入
  • 作用域为块级 { … }
  • 不可以在声明之前使用,会报错
  • 不可以重新声明,后续声明会报错

例如:

console.log(a); // 报错,a未声明
let a = 1;   

function test() {
  let b = 1;
  {
    let b = 2;  // 这里会报错,b已声明
  }
}
  1. const:常量声明,ES6 中引入
  • 作用域同 let,为块级
  • 声明时必须初始化,且无法修改
  • 不可以重新声明

例如:

const a = 1;  
a = 2;      // TypeError,无法修改常量
const b;     // SyntaxError,必须初始化
const c = 1;
const c = 2; // Identifier 'c' has already been declared

所以总结来说:

  • var:函数作用域,提升,可以重复声明
  • let:块级作用域,不提升,不可以重复声明
  • const:块级作用域常量,不提升,不可以重复声明,无法修改值

理解变量声明方式的差异,可以帮助我们编写符合标准的代码,避免一些常见问题。
在实践中,我们应优先使用 let 和 const,避免 var 带来的一些问题。let 用于可能改变的变量,const 用于常量,这可以让我们的代码更加清晰易理解。