纹身网站建设,免费建立公司网站,营销型网站图片,做网站专题页需要注意什么在 JavaScript 中#xff0c;var、let 和 const 都用于声明变量#xff0c;但它们有一些重要的区别#xff0c;主要体现在 作用域、可变性和提升机制 等方面。
1. 作用域#xff08;Scope#xff09; var: var 声明的变量是 函数作用域#xff0c;也就是说#xff0c;它…在 JavaScript 中var、let 和 const 都用于声明变量但它们有一些重要的区别主要体现在 作用域、可变性和提升机制 等方面。
1. 作用域Scope var: var 声明的变量是 函数作用域也就是说它只在函数内部有效。如果 var 声明在函数外面它的作用域就是全局的。如果 var 在一个代码块内如 if 语句中声明它的作用域并不限于该代码块而是整个函数或全局作用域。
if (true) { var a 10; }
console.log(a);// 10因为a是函数作用域或者全局作用域 let 和 const: let 和 const 都是 块级作用域这意味着它们的作用域限制在所在的代码块如 {} 包裹的部分内。 if (true){ let b 20; const c 30; }
console.log(b); // ReferenceError: b is not defined
console.log(c); // ReferenceError: c is not defined 这里let 和 const 声明的变量只在 if 语句的代码块内部有效。
2. 变量提升Hoisting var: var 声明的变量会 被提升到函数或全局作用域的顶部但初始化不会被提升。所以变量在声明之前仍然能访问到但值为 undefined。 console.log(a); // undefined因为声明被提升但赋值没有
var a 5; let 和 const: let 和 const 声明的变量也会被提升但 在初始化之前不能访问如果访问它们会导致 ReferenceError。这就是所谓的 暂时性死区Temporal Dead Zone, TDZ。 console.log(b); // ReferenceError: Cannot access b before initialization
let b 10; 这样let 和 const 声明的变量不能在声明之前访问。
3. 可变性Mutability var 和 let: 都声明的是 可变变量即你可以在后续重新赋值。 示例 var x 10; x 20; // 允许重新赋值
let y 30; y 40; // 也允许重新赋值 const: const 声明的是 常量意味着你声明时必须给它赋值并且之后不能再修改它的绑定不能重新赋值。但是如果 const 绑定的是一个对象或数组那么对象的内容是可以修改的例如添加、删除属性或元素。
const z 50; z 60; // TypeError: Assignment to constant variable.
const obj { a: 1 };
obj.a 2; // 这是合法的修改对象的内容
console.log(obj.a); // 2 这里const 防止了对变量的重新赋值但并不阻止修改对象的内容。
4. 全局作用域中的 var 与 let/const var: 如果你在全局作用域中使用 var 声明一个变量它会成为全局对象浏览器中的 window 或 Node.js 中的 global的属性。 示例 var globalVar I am global;
console.log(window.globalVar); // I am global 在浏览器中 let 和 const: 如果你在全局作用域中使用 let 或 const它们不会成为全局对象的属性。 示例 let globalLet I am block-scoped;
console.log(window.globalLet); // undefined
总结对比
特性varletconst作用域函数作用域块级作用域块级作用域提升变量提升但值为 undefined变量提升但不能在初始化前使用变量提升但不能在初始化前使用可变性可重新赋值可重新赋值不能重新赋值但对象内容可修改全局作用域行为成为全局对象的属性不会成为全局对象的属性不会成为全局对象的属性
选择使用
如果你需要声明一个变量并且后续可能会重新赋值使用 let。如果你需要一个常量值不变使用 const。避免使用 var因为它的作用域是函数级别的容易导致意外的错误尤其是在复杂的代码中。