为什么JavaScript提升变量?
设计师决定实施吊装时的理由是什么?还有其他流行语言吗?
请提供文档和/或记录的相关链接.
由于ES6类只是JavaScript现有的基于原型的继承 [1]的语法糖,因此(IMO)提升它的定义是有道理的:
var foo = new Foo(1, 2); //this works
function Foo(x, y) {
this.x = x;
this.y = y;
}
Run Code Online (Sandbox Code Playgroud)
但以下方法不起作用:
var foo = new Foo(1, 2); //ReferenceError
class Foo {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不提升ES6课程?
我知道这let
将被提升到块的顶部,但是在初始化之前访问它将抛出ReferenceError
到期Temporal Dead Zone
例如:
console.log(x); // Will throw Reference Error
let x = 'some value';
Run Code Online (Sandbox Code Playgroud)
但是像这样的代码片段会运行而不会出错:
foo(); // alerts foo;
function foo(){ // foo will be hoisted
alert("foo");
}
Run Code Online (Sandbox Code Playgroud)
我的问题
let
当它在访问时会出现错误时,将其提升到顶部的目的是什么?也有var
遭受TDZ的影响,我知道什么时候会抛出,undefined
但是因为TDZ?