【发布时间】:2015-10-21 07:16:06
【问题描述】:
我知道let是声明块作用域局部变量,但是为什么不像var那样支持重声明和提升呢?
这个限制的设计目的是什么?
(function(){
'use strict';
alert(a); // undefined
var a;
})();
(function(){
'use strict';
alert(a); // error
let a;
})();
(function(){
'use strict';
var a;
var a;
alert(a); // undefined
})();
(function(){
'use strict';
let a;
let a; // error
alert(a);
})();
【问题讨论】:
-
@user2190986 但很明显
let没有在 JavaScript 中声明常量 -
@user2190986
const用于声明常量。 -
let声明被提升。但与var声明不同,该变量不会在块的开头使用undefined进行初始化。 -
In fact
letdeclarations are hoisted。重新声明几乎总是一个错误(可能在 REPL 中除外),所以它们现在是一个错误。