二维码

JavaScript Let

JavaScript Let

该关键字在[ES6 (2015)]. let中引入

let使用块作用域声明的变量

使用let声明的变量必须在使用前声明

let声明的变量不能在同一范围内重新声明

块范围

ES6(2015)之前,JavaScript 没有Block Scope

JavaScript 有全局作用域函数作用域

ES6引入了两个新的 JavaScript 关键字:letconst

这两个关键字在 JavaScript 中提供了块作用域

:无法从块外部访问`{ }` 块内声明的变量
1
2
3
4
{  
  let x = 2;
}
// x can NOT be used here

全球范围

使用 声明的变量var始终具有全局作用域

使用var关键字声明的变量不能具有块作用域:

:`var`可以从块外部访问在 { } 块内声明的变量
1
2
3
4
{  
  var x = 2;
}
// x CAN be used here

不能重新申报

let 定义的变量不能被重新声明。

您不会意外地重新声明使用let声明的变量。

let不能这样做:

1
2
3
let x = "John Doe";  

let x = 0;

可以重新声明用var定义的变量。

var可以做到这一点:

1
2
3
var x = "John Doe";  

var x = 0;

重新声明变量

使用关键字var重新声明变量可能会带来问题。

在块内重新声明变量也会在块外重新声明变量:

1
2
3
4
5
6
7
8
9
var x = 10;  
// Here x is 10

{
var x = 2;
// Here x is 2
}

// Here x is 2

使用关键字let重新声明变量可以解决这个问题。

在块内重新声明变量不会在块外重新声明变量:

1
2
3
4
5
6
7
8
9
let x = 10;  
// Here x is 10

{
let x = 2;
// Here x is 2
}

// Here x is 10

var、let和 const之间的区别

范围 重述 重新分配 吊装 绑定这个
var No Yes Yes Yes Yes
let Yes No Yes No No
const Yes No No No No

什么是好的?

let并且const 具有块作用域

let并且const 不能重新申报

let并且const 必须在使用前声明

let并且const 不绑定this.

let并且不const 被吊装

什么是不好?

var不必声明。

var被吊起。

var与此相关。


浏览器支持

Internet Explorer 11 或更早版本不支持letconst关键字。

下表定义了完全支持的第一个浏览器版本:

Chrome 49 Edge 12 Firefox 36 Safari 11 Opera 36
Mar, 2016 Jul, 2015 Jan, 2015 Sep, 2017 Mar, 2016

重新申报

var允许在程序中的任何位置重新声明 JavaScript 变量:

1
2
3
4
5
var x = 2;  
// Now x is 2

var x = 3;
// Now x is 3

对于let,不允许在同一块中重新声明变量:

1
2
3
4
5
6
7
8
9
10
11
12
var x = 2;   // Allowed  
let x = 3;   // Not allowed

{
let x = 2;   // Allowed
let x = 3;   // Not allowed
}

{
let x = 2;   // Allowed
var x = 3;   // Not allowed
}

let允许在另一个块中使用 ,重新声明变量:

1
2
3
4
5
6
7
8
9
let x = 2;   // Allowed  

{
let x = 3;   // Allowed
}

{
let x = 4;    // Allowed
}


Let吊装

用定义的变量var提升到顶部并且可以随时初始化。

含义:您可以在声明变量之前使用该变量:

还行吧:

1
2
carName = "Volvo";  
var carName;

用定义的变量let也会被提升到块的顶部,但不会被初始化。

含义:let在声明变量之前使用变量将导致 ReferenceError

1
2
carName = "Saab";  
let carName = "Volvo";