网站用户反馈,微信网站特点,厦门网红酒店,wordpress顶部工具栏修改logojs基础—var与let的区别以及const的使用
var与let的区别
在较旧的JavaScript#xff0c;使用关键字var来声明变量#xff0c;而不是let。var现在开发中一般不再使用它#xff0c;只是我们可能再老版程序中看到它。let的出现为了解决var的一些问题。 var 声明存在以下三种问…js基础—var与let的区别以及const的使用
var与let的区别
在较旧的JavaScript使用关键字var来声明变量而不是let。var现在开发中一般不再使用它只是我们可能再老版程序中看到它。let的出现为了解决var的一些问题。 var 声明存在以下三种问题
可以先使用在声明 (不合理)var声明过的变量可以重复声明(不合理比如变量提升、全局变量、没有块级作用域等等
举例说明
变量提升
var的情况console.log(a); // 输出undefined
var a 10;解释var声明的变量会被提升到函数或全局作用域的顶部但此时变量的值还未被初始化所以输出undefined。let的情况console.log(b); // 报错ReferenceError: b is not defined
let b 20;解释let声明的变量也会被提升但不会被初始化处于暂时性死区所以访问它会报错。
重复声明
var的情况var c 30;
var c 40;
console.log(c); // 输出40解释var声明的变量可以重复声明后面的声明会覆盖前面的声明。let的情况let d 50;
let d 60; // 报错SyntaxError: Identifier d has already been declared解释let声明的变量不能重复声明否则会报错。
作用域
var的情况if (true) {var e 70;
}
console.log(e); // 输出70解释var声明的变量具有函数作用域或全局作用域没有块级作用域所以在if块外部也可以访问到e。let的情况if (true) {let f 80;
}
console.log(f); // 报错ReferenceError: f is not defined解释let声明的变量具有块级作用域在if块外部无法访问到f。
全局变量
var的情况function g() {var h 90;
}
g();
console.log(h); // 报错ReferenceError: h is not definedvar i 100;
console.log(window.i); // 输出100解释在函数内部使用var声明的变量不会成为全局变量。在全局作用域中使用var声明的变量会成为全局对象如浏览器中的window的属性。let的情况function j() {let k 110;
}
j();
console.log(k); // 报错ReferenceError: k is not definedlet l 120;
console.log(window.l); // 输出undefined解释let声明的变量不会成为全局对象的属性无论是函数内部还是全局作用域。 var确实存在一些问题如变量提升可能导致的逻辑错误、重复声明带来的混淆以及缺乏块级作用域等。在现代JavaScript开发中推荐使用let来声明变量以避免这些问题提高代码的可读性和可维护性。 常量const
概念
使用const声明的变量称为“常量”。常量与变量的主要区别在于常量一旦被赋值后其值就不能再被改变。这使得常量在程序中具有稳定性和可预测性有助于减少因意外修改而导致的错误。
使用场景
当某个变量的值在程序的整个生命周期中都不会改变时就可以使用const来声明。例如一些数学常数、配置参数、枚举值等都可以使用const声明。使用const声明常量可以明确地表达出该值不应当被修改的意图同时也能够让阅读代码的人更容易理解代码的意图。
命名规范
常量的命名规范与变量基本一致但有一些细微的差别。通常情况下常量的名称使用大写字母单词之间用下划线连接以突出其常量的特性。例如
const MAX_VALUE 100;
const PI 3.14159;这种命名方式可以让开发者在阅读代码时能够快速识别出这是一个常量而不是一个普通变量。
常量使用示例
// 声明一个常量
const G 9.8;
// 输出这个常量
console.log(G);注意事项 不允许重新赋值常量一旦被赋值后就不能再被重新赋值。如果尝试对常量重新赋值将会导致语法错误。例如 const G 9.8;
G 9.9; // TypeError: Assignment to constant variable.这一特性确保了常量的值在程序运行过程中始终保持不变。 声明时必须赋值初始化使用const声明常量时必须在声明的同时进行初始化赋值。不能先声明常量然后再赋值。例如 const G; // SyntaxError: Missing initializer in const declaration
G 9.8;这是因为const声明的常量必须有一个明确的初始值以保证其在整个作用域内的值都是确定的。
小技巧
对于不需要重新赋值的数据使用const是一个很好的选择。这不仅可以避免意外修改数据还可以提高代码的可读性和可维护性。在实际开发中养成使用const的习惯可以让你的代码更加健壮和清晰。
常量与对象属性
需要注意的是虽然使用const声明的对象本身不能被重新赋值但对象的属性是可以被修改的。例如
const obj { name: Kimi, age: 20 };
obj.name Moonshot; // 合法操作修改对象属性
console.log(obj); // 输出 { name: Moonshot, age: 20 }这是因为const只是保证了变量指向的对象引用不能改变而不是对象内部的属性不能改变。如果需要保证对象的属性也不被修改可以使用Object.freeze()方法来冻结对象使其成为不可变对象。例如
const obj { name: Kimi, age: 20 };
Object.freeze(obj);
obj.name Moonshot; // 不会改变对象属性因为对象被冻结了
console.log(obj); // 输出 { name: Kimi, age: 20 }通过这种方式可以确保对象及其属性在整个程序中都不会被修改从而实现更严格的数据保护。
总之合理使用const声明常量可以在很大程度上提高代码的质量和稳定性。在编写JavaScript代码时建议尽可能多地使用const来声明那些不需要改变的值。