目录

JavaScript Let

这个let关键字被引入ES6(2015)

声明的变量let块作用域

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

声明的变量let不可能是重新声明在同一作用域内

块作用域

在 ES6(2015)之前,JavaScript 没有块作用域

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

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

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

示例

无法从块外部访问 { } 块内声明的变量:

{
  let x = 2;
}
// x can NOT be used here

全局作用域

声明的变量var一直有全局作用域

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

示例

声明的变量var可以从块外部访问 { } 块内部:

{
  var x = 2;
}
// x CAN be used here

不能重新声明

变量定义为let不能被重新宣布。

您不能意外地重新声明使用以下方式声明的变量let

let不能做这个:

let x = "John Doe";

let x = 0;

变量定义为var被重新宣布。

var做这个:

var x = "John Doe";

var x = 0;

重新声明变量

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

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

示例

var x = 10;
// Here x is 10

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

// Here x is 2
亲自试一试 »

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

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

示例

let x = 10;
// Here x is 10

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

// Here x is 10
亲自试一试 »

var、let 和 const 之间的区别

作用域 重新声明 重新分配 提升 绑定这个
变量 是的 是的 是的 是的
Let 是的 是的
常量 是的

什么是好的?

letconst块作用域

letconst不可能是重新声明

letconst必须是宣布使用前。

letconst不绑定this

letconst未吊装

什么是不好?

var不必声明。

var被吊起。

var与此相关。


浏览器支持

这个letconstInternet Explorer 11 或更早版本不支持关键字。

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

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


重新声明

重新声明 JavaScript 变量var允许在程序中的任何地方使用:

示例

var x = 2;
// Now x is 2

var x = 3;
// Now x is 3
亲自试一试 »

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

示例

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,在另一个块中,允许:

示例

let x = 2;   // Allowed

{
let x = 3;   // Allowed
}

{
let x = 4;    // Allowed
}
亲自试一试 »

Let 提升

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

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

示例

还行吧:

carName = "Volvo";
var carName;
亲自试一试 »

如果您想了解有关起重的更多信息,请学习本章JavaScript 提升

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

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

示例

carName = "Saab";
let carName = "Volvo";
亲自试一试 »