我试图通过阅读ES6中的原始规范来理解新的标准化块级函数。我初步的理解是:
- ES6允许块级函数声明。
- 他们会被提升到块的顶部。
- 在严格模式下,它们在包含块之外不可见。
然而,这个问题变得更加复杂的原因是,其中部分语义被规定为“可选”,仅对Web浏览器强制执行(附录B)。因此,我想要填写以下表格:
| 块外是否可见? | 提升? 提升的范围是什么? | "TDZ"? | ------------------------------------------------------------------------------------------------------------------------ | 非严格模式,无“web扩展” | | | | | 严格模式,无“web扩展” | | | | | 非严格模式,带有“web扩展” | | | | | 严格模式,带有“web扩展” | | | |
此外,我没有明确了解到在这个上下文中“严格模式”的含义。这个区别似乎是在附录B3.3中引入的,作为一些函数声明运行时执行的额外步骤的一部分:
1. If strict is false, then
...
然而,就我所见,strict
指的是函数对象的 [[Strict]]
内部插槽。这是否意味着:
// Non-strict surrounding code
{
function foo() {"use strict";}
}
在上表中是否应该考虑为“严格模式”?然而,这与我的初始直觉相矛盾。
请记住,我主要关注ES6规范本身,而不考虑实际实现的不一致性。