第2课_变量与常量
热度🔥:12 免费课程
授课语音
掌握ES6中变量和常量的使用与区别
在JavaScript中,ES6引入了let
和const
,这两个关键字用于声明变量和常量。它们相较于传统的var
关键字,在作用域、赋值以及重声明等方面有显著的不同,理解这些区别对于编写高质量的代码至关重要。
1. ES6中的变量声明:let
与var
1.1 let
和var
的区别
var
是ES5中的变量声明方式,作用域是函数作用域,也就是说如果在函数内部声明了var
,它的作用域就是整个函数。而let
是ES6新增的,作用域是块级作用域,即只在最近的代码块(如if
语句、for
循环等)中有效。let
不会出现变量提升的问题,而var
会提升到函数的顶部。
代码示例:let
与var
的区别
// 使用var声明的变量
function testVar() {
if (true) {
var x = 10; // 在if块中声明
}
console.log(x); // 输出:10,因为var的作用域是函数级别
}
testVar();
// 使用let声明的变量
function testLet() {
if (true) {
let y = 20; // 在if块中声明
}
console.log(y); // 报错:ReferenceError: y is not defined,let的作用域是块级作用域
}
testLet();
var x = 10;
声明的x
变量,其作用域是整个函数,所以在if
外部也能访问。let y = 20;
声明的y
变量,其作用域是if
块内部,外部无法访问,导致错误。
1.2 变量提升
var
声明的变量会被提升到作用域顶部,但赋值不会被提升,而let
则不会发生变量提升。
代码示例:变量提升
console.log(a); // 输出:undefined,因为var声明的变量被提升,但赋值未发生
var a = 5;
console.log(b); // 报错:ReferenceError: Cannot access 'b' before initialization
let b = 10;
2. 常量声明:const
2.1 const
的特点
const
用于声明常量,声明后其值不能改变。const
也具有块级作用域,和let
类似。const
必须在声明时初始化,不能单独声明再赋值。
代码示例:const
声明常量
const PI = 3.14159; // 声明常量并初始化
console.log(PI); // 输出:3.14159
PI = 3.14; // 报错:TypeError: Assignment to constant variable,常量的值不能更改
2.2 const
与对象和数组
const
声明的是常量的引用,而不是值本身。因此,如果常量是对象或数组,常量的引用(即地址)不能改变,但对象内部的属性或数组的元素仍然可以修改。
代码示例:const
与对象、数组
const person = { name: "Alice", age: 25 };
person.age = 26; // 可以修改对象的属性
console.log(person.age); // 输出:26
person = { name: "Bob", age: 30 }; // 报错:TypeError: Assignment to constant variable,不能重新赋值
const person = { name: "Alice", age: 25 };
:声明一个常量对象。person.age = 26;
:修改对象内部的属性是允许的,因为const
保证的是对象的引用不可变。person = { name: "Bob", age: 30 };
:不能改变person
的引用,即不能指向另一个对象。
3. let
与const
的使用建议
let
:当你需要在后续代码中修改变量的值时使用let
,例如在循环中或需要赋值更新的场景。const
:当你不希望变量的值被重新赋值时,使用const
,例如对于常量或对象引用不变的情况。
通过合理选择let
和const
,可以更好地控制代码的可变性和提升代码的可读性,避免不必要的错误。
4. 总结
var
和let
的区别:var
具有函数作用域,let
具有块级作用域;var
会发生变量提升,let
不会。const
的特点:const
声明的是常量,值不可修改,但对于对象或数组的内容仍然可以修改。- 最佳实践:尽量使用
let
和const
,const
用于常量,let
用于可变变量。
掌握let
、const
和var
的区别及使用场景,可以帮助我们编写更安全、更高效的代码。