JavaScript Let
关键字 let
在 ES6 (2015) 中被引入。
使用 let
声明的变量具有 块级作用域。
使用 let
声明的变量必须在使用之前 声明。
使用 let
声明的变量在同一个作用域中不能被 重新声明。
块级作用域
在 ES6 (2015) 之前,JavaScript 没有 块级作用域。
JavaScript 只有 全局作用域 和 函数作用域。
ES6 引入了两个新的 JavaScript 关键字:let
和 const
。
这两个关键字为 JavaScript 提供了 块级作用域。
例子
在 { } 块内声明的变量无法从块外访问。
{
let x = 2;
}
// 这里不能使用 x
全局作用域
使用 var
声明的变量始终具有 全局作用域。
使用 var
关键字声明的变量不能具有块级作用域。
例子
使用 var
在 { } 块内声明的变量可以从块外访问。
{
var x = 2;
}
// 这里可以使用 x
不能被重新声明
使用 let
定义的变量 不能 被重新声明。
您不能意外地重新声明使用 let
声明的变量。
使用 let
您 不能 执行此操作。
let x = "John Doe";
let x = 0;
使用 var
定义的变量 可以 被重新声明。
使用 var
您 可以 执行此操作。
var x = "John Doe";
var x = 0;
重新声明变量
使用 var
关键字重新声明变量可能会导致问题。
在块内重新声明一个变量,也会重新声明块外的变量。
使用 let
关键字重新声明变量可以解决这个问题。
在块内重新声明一个变量,不会重新声明块外的变量。
var、let 和 const 的区别
作用域 | 重新声明 | 重新分配 | 提升 | 绑定 this | |
var | 否 | 是 | 是 | 是 | 是 |
let | 是 | 否 | 是 | 否 | 否 |
const | 是 | 否 | 否 | 否 | 否 |
什么是好的?
let
和 const
具有 **块级作用域**。
let
和 const
不能 **重新声明**。
let
和 const
必须在使用之前 **声明**。
let
和 const
不会 **绑定** 到 this
。
let
和 const
不会 **提升**。
什么是不好的?
var
不需要声明。
var
会提升。
var
会绑定到 this。
浏览器支持
let
和 const
关键字在 Internet Explorer 11 或更早版本中不受支持。
下表定义了第一个完全支持这些关键字的浏览器版本
Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
2016 年 3 月 | 2015 年 7 月 | 2015 年 1 月 | 2017 年 9 月 | 2016 年 3 月 |
重新声明
使用 var
重新声明 JavaScript 变量在程序中的任何位置都是允许的
使用 let
在同一个块中重新声明变量是不允许的
例子
var x = 2; // 允许
let x = 3; // 不允许
{
let x = 2; // 允许
let x = 3; // 不允许
}
{
let x = 2; // 允许
var x = 3; // 不允许
}
在另一个块中使用 let
重新声明变量是允许的
let 提升
使用 var
定义的变量会被 **提升** 到顶部,并且可以在任何时候被初始化。
这意味着:您可以在变量被声明之前使用它
如果您想了解更多关于提升的信息,请学习章节 JavaScript 提升。
使用 let
定义的变量也会被提升到块的顶部,但不会被初始化。
这意味着:在变量被声明之前使用 let
变量会导致 ReferenceError