您的位置:首页 > 游戏 > 手游 > var let const 之间的比较

var let const 之间的比较

2024/12/23 9:38:00 来源:https://blog.csdn.net/Oxford1151/article/details/141170009  浏览:    关键词:var let const 之间的比较

var

特点
  • 函数作用域var 声明的变量在函数内有效,如果在函数外声明,则为全局作用域。
  • 变量提升var 声明的变量会被提升到函数的顶部,初始化为 undefined。即使在声明之前引用,JavaScript 也不会抛出错误。
  • 可重复声明:在同一作用域内,可以多次声明同一个变量,不会引发错误。
用法
// 在函数内
function example() {var x = 1;if (true) {var x = 2; // 同一作用域内的重复声明console.log(x); // 2}console.log(x); // 2
}// 在全局范围
var y = 10;
console.log(y); // 10
容易出错点
  • 作用域问题:由于 var 的作用域是函数级别的,容易引起作用域混淆,特别是在循环和条件语句中。
  • 提升问题:变量提升可能导致意料之外的结果,例如在使用变量之前访问它,结果是 undefined
  • 重复声明:允许重复声明变量可能导致难以追踪的错误。

let

特点
  • 块级作用域let 声明的变量只在块级作用域内有效(如 if 语句或循环)。
  • 变量提升let 声明的变量会被提升,但不会初始化。在声明之前访问会导致 ReferenceError
  • 不可重复声明:在同一作用域内不能重复声明同一变量,会引发 SyntaxError
用法
function example() {let x = 1;if (true) {let x = 2; // 块级作用域内的声明console.log(x); // 2}console.log(x); // 1
}// 在循环中
for (let i = 0; i < 3; i++) {console.log(i); // 0, 1, 2
}
console.log(i); // ReferenceError: i is not defined
容易出错点
  • 暂时性死区let 变量在声明之前访问会导致 ReferenceError,可能导致不易追踪的错误。
  • 块级作用域:初学者可能会混淆 let 的块级作用域与 var 的函数作用域,特别是在循环和条件语句中。

const

特点
  • 块级作用域const 的作用域与 let 相同,也是块级作用域。
  • 常量const 声明的变量必须在声明时初始化,并且之后不能被重新赋值(对于基本数据类型)。对于对象和数组,const 保证引用不变,但对象的内容可以改变。
  • 变量提升const 声明的变量会被提升,但不会初始化。在声明之前访问会导致 ReferenceError
用法
const x = 10;
console.log(x); // 10
// x = 20; // TypeError: Assignment to constant variableconst obj = { key: 'value' };
obj.key = 'newValue'; // 这是允许的
console.log(obj.key); // 'newValue'// 对象或数组的内容可以被修改
const arr = [1, 2, 3];
arr.push(4); // 这是允许的
console.log(arr); // [1, 2, 3, 4]
容易出错点
  • 重新赋值const 变量必须在声明时初始化,并且不能重新赋值。尝试重新赋值会导致 TypeError
  • 内容修改:虽然 const 保证了变量绑定的引用不变,但对于对象和数组,内容是可以修改的。需要注意区分引用不变与内容可变。
  • 块级作用域:与 let 一样,const 的块级作用域可能导致作用域混淆,特别是在循环和条件语句中。

总结

  • var:适用于旧代码,函数作用域,存在提升和重复声明问题。
  • let:推荐用于需要块级作用域的情况,避免提升和重复声明问题。
  • const:推荐用于需要不可重新赋值的常量,块级作用域,但要注意对象和数组的内容可以修改。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com