返回
ES6系列第一:let、const和var——一个开发者的备忘录
前端
2023-12-15 10:01:35
let、const和var的区别
特性 | let | const | var |
---|---|---|---|
作用域 | 块级 | 块级 | 函数级 |
暂时性死区 | 是 | 是 | 否 |
块级作用域 | 是 | 是 | 否 |
全局变量 | 否 | 否 | 是 |
var提升 | 是 | 是 | 是 |
let提升 | 否 | 否 | 是 |
const提升 | 否 | 否 | 是 |
变量重声明 | 否 | 否 | 是 |
变量再赋值 | 是 | 否 | 是 |
let
let用于声明块级作用域的变量,这意味着变量只能在声明所在的块({})内访问。在块外访问变量将导致ReferenceError错误。let还具有暂时性死区,这意味着变量在声明之前是不可访问的。
用例:
{
let x = 10;
console.log(x); // 10
}
console.log(x); // ReferenceError: x is not defined
const
const用于声明块级作用域的常量,这意味着变量的值在声明后不能被改变。尝试重新赋值常量将导致TypeError错误。const也具有暂时性死区。
用例:
const PI = 3.14;
console.log(PI); // 3.14
PI = 3.15; // TypeError: Assignment to constant variable.
var
var用于声明函数级作用域的变量,这意味着变量可以在声明所在的函数及其内部嵌套函数中访问。var不具有暂时性死区,这意味着变量在声明之前是可访问的。var还允许变量重声明和再赋值。
用例:
function foo() {
var x = 10;
console.log(x); // 10
}
foo();
console.log(x); // ReferenceError: x is not defined
var提升
var声明的变量会发生提升,这意味着变量在声明之前就可以被访问。这可能会导致意外的错误。
用例:
console.log(x); // undefined
var x = 10;
let和const提升
let和const声明的变量不会发生提升,这意味着变量只能在声明之后才能被访问。这可以防止意外的错误。
用例:
console.log(x); // ReferenceError: x is not defined
let x = 10;
变量重声明
var允许变量重声明,这意味着可以在同一个作用域内多次声明同一个变量。这可能会导致意外的错误。
用例:
var x = 10;
var x = 20;
console.log(x); // 20
变量再赋值
var和let允许变量再赋值,这意味着变量的值可以在声明后被改变。
用例:
var x = 10;
x = 20;
console.log(x); // 20
const不允许变量再赋值,这意味着变量的值在声明后不能被改变。
用例:
const x = 10;
x = 20; // TypeError: Assignment to constant variable.
结论
let、const和var是ES6中三种新的变量声明方式,它们具有不同的作用域、暂时性死区、块级作用域、全局变量、提升、重声明和再赋值等特性。开发者需要根据不同的使用场景选择合适的变量声明方式,以提高代码的可读性和可维护性。