乐闻世界logo
搜索文章和话题

var、let、const 之间的区别是什么?

浏览14
6月24日 16:43

var

var 是 JavaScript 早期版本中使用的变量声明关键字,它有几个特点:

  • 函数作用域var 声明的变量是按照函数作用域进行绑定的,如果在函数外部声明,它就具有全局作用域。
  • 变量提升(Hoisting):使用 var 声明的变量会被提升至其作用域的顶部,但是只提升声明不提升初始化。
  • 重复声明:用 var 声明的变量可以在同一作用域中被重新声明。
javascript
console.log(foo); // 输出 undefined 而不是抛出错误,因为变量提升 var foo = 5; function testVar() { var bar = "hello"; } console.log(bar); // 抛出错误,因为 bar 是在函数内部声明的,外部无法访问 var foo = "world"; // 这是允许的,foo 被重新声明

let

let 是 ES6 (ECMAScript 2015) 引入的关键字,用于声明变量,并且它带来了几个改进:

  • 块作用域let 声明的变量是按照块作用域(如 {} 内部)进行绑定的。
  • 没有变量提升let 声明的变量不会提升,它们必须在声明之后才能被使用。
  • 不能重复声明:在同一作用域下不能重新声明同一个变量。
javascript
console.log(foo); // 抛出错误,foo 没有被提升 let foo = 5; if (true) { let bar = "hello"; } console.log(bar); // 抛出错误,bar 在 if 语句的块作用域外无法访问 let foo = "world"; // 抛出错误,foo 不能被重新声明

const

const 同样是在 ES6 引入的,用于声明常量,具有以下特性:

  • 块作用域:与 let 相同,const 声明的变量也是块作用域。
  • 没有变量提升:同样,const 声明的变量在声明之前不能被访问。
  • 不能重复声明:不能在相同作用域下重新声明。
  • 必须初始化:使用 const 声明变量时必须立即初始化,并且之后不能修改。
javascript
const foo = 5; foo = 10; // 抛出错误,因为 const 声明的变量不能被重新赋值 if (true) { const bar = "hello"; } console.log(bar); // 抛出错误,因为 bar 在 if 语句的块作用域外无法访问 const foo; // 抛出错误,因为 const 声明的变量必须在声明时初始化

总结来说,letconst 是对 var 的一个改进,提供了块作用域特性,并解决了变量提升和重复声明所带来的问题。在现代 JavaScript 编程中,推荐使用 letconst 来声明变量,以便代码更加清晰和安全。

标签:前端ES6