在 ES6(2015)之前,JavaScript 没有块作用域。
JavaScript 有全局作用域和函数作用域。
ES6 引入了两个新的 JavaScript 关键字:let
和const
。
提供了这两个关键字块作用域在 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
关键字可能会带来问题。
在块内重新声明变量也会在块外重新声明变量:
使用重新声明变量let
关键字可以解决这个问题。
在块内重新声明变量不会在块外重新声明变量:
作用域 | 重新声明 | 重新分配 | 提升 | 绑定这个 | |
变量 | 不 | 是的 | 是的 | 是的 | 是的 |
Let | 是的 | 不 | 是的 | 不 | 不 |
常量 | 是的 | 不 | 不 | 不 | 不 |
let
和const
有块作用域。
let
和const
不可能是重新声明。
let
和const
必须是宣布使用前。
let
和const
做不绑定到this
。
let
和const
是未吊装。
var
不必声明。
var
被吊起。
var
与此相关。
这个let
和const
Internet Explorer 11 或更早版本不支持关键字。
下表定义了完全支持的第一个浏览器版本:
Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
Mar, 2016 | Jul, 2015 | Jan, 2015 | Sep, 2017 | Mar, 2016 |
重新声明 JavaScript 变量var
允许在程序中的任何地方使用:
和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
,在另一个块中,允许:
变量定义为var
是提升到顶部并可以随时初始化。
含义:您可以在声明变量之前使用该变量:
如果您想了解有关起重的更多信息,请学习本章JavaScript 提升。
变量定义为let
也被提升到块的顶部,但未初始化。
含义:使用let
声明之前的变量将导致ReferenceError
:
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!