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,以避免一些由于作用域和变量提升导致的难以调试的问题。