var、let、const

92 阅读1分钟

var:

• 作用域:var 声明的变量具有函数作用域,即在函数内部声明的 var 变量,在整个函数内都是可见的。如果在全局作用域中声明,它会成为全局对象的属性。

• 变量提升:var 声明的变量会存在变量提升,即在变量声明之前访问该变量,不会报错,只是其值为 undefined。

示例代码:

function example() {
  console.log(a); // 输出 undefined
  var a = 10;
}example();

let:

• 作用域:let 声明的变量具有块级作用域,即仅在其所在的代码块(如 if 语句、for 循环等)内可见。

• 不存在变量提升:在 let 变量声明之前访问它会导致错误。

• 暂时性死区:在声明 let 变量之前的区域,该变量不可访问,称为暂时性死区。

示例代码:

if (true) {
  let b = 20;
}console.log(b); // 报错,b 未定义

const:

• 作用域:与 let 一样,具有块级作用域。

• 常量:声明时必须初始化,且后续不能重新赋值。但如果 const 声明的是一个对象或数组,其属性或元素是可以修改的。

示例代码:

const c = 30;
c = 40; // 报错,不能重新赋值

const obj = { name: 'John' };
obj.name = 'Jane'; // 可以修改对象的属性

总的来说,在现代 JavaScript 开发中,推荐优先使用 let 和 const 来替代 var,以避免一些由于作用域和变量提升导致的难以调试的问题。