【发布时间】:2017-06-07 19:50:02
【问题描述】:
我正在阅读this book on ES6 并且有以下内容:
函数声明…
- 是块范围的,例如 let。
- 在全局对象中创建属性 (在全局范围内),如 var.
- 被吊起:独立于何处 函数声明在其范围内被提及,它总是被创建 在范围的开头。
AFAIK,函数一直是函数作用域的。我认为 ES6 中可能发生了一些变化,但没有:
function a() {
if (true) {
// defined inside the block and is hoisted to the top of that block
z();
function z() { console.log ('z')}
}
z();
}
// but is also hoisted to the function scope
a(); // works OK
实际上,它们似乎是块作用域:
function a() {
if (false) {
// defined inside the block and is hoisted to the top of that block
z();
function z() { console.log ('z')}
}
z(); // error
}
那么它在 ES6 中是否发生了变化?
【问题讨论】:
-
我认为这本书以(现有的)函数声明为例来解释
let如何融入图片。 -
那是因为你在松散模式下执行它。在严格模式下,它应该符合预期。