二维码

JavaScript Let

JavaScript Let

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

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

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

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

块范围

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

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

ES6引入了两个新的 JavaScript 关键字:let和const。

这两个关键字在 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 或更早版本不支持let和const关键字。

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

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";