为什么让语句的行为与var有很大不同?

Ruf*_*fus 5 javascript ecmascript-6

我知道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);
})();
Run Code Online (Sandbox Code Playgroud)

Mad*_*iha 8

我们的想法是创建一个比原始工具更明确,更严格的工具var.

作为一个人,以下是有效的JavaScript,但几乎无法理解:

alert(a); // Where does a come from? Why does this not throw?
/* 1000 lines later, or even in an entirely different file */
var a;
Run Code Online (Sandbox Code Playgroud)

此外,想象代码var在同一范围内对同一个变量有5个声明,有些在if语句中,有些在fors中.哪个是第一个?最终会创造什么价值?

这个想法是修复一些不好的部分var.