返回

ES6系列第一:let、const和var——一个开发者的备忘录

前端

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中三种新的变量声明方式,它们具有不同的作用域、暂时性死区、块级作用域、全局变量、提升、重声明和再赋值等特性。开发者需要根据不同的使用场景选择合适的变量声明方式,以提高代码的可读性和可维护性。