我试图通过阅读原始规范来了解 ES6 中新的标准化块级函数。我的粗浅理解是:
- ES6 中允许块级函数声明。
- 他们吊到块的顶部。
- 在严格模式下,它们在包含块之外不可见。
但是,由于这些语义的一部分被指定为“可选”并且仅对 Web 浏览器是必需的(附件 B),这一事实使情况变得更加复杂。所以我想填写下表:
| 在块外可见?| 吊起?到什么程度?| “TDZ”?| -------------------------------------------------- -------------------------------------------------- -------------------- | 非严格模式,没有“网络扩展” | | | | | 严格模式,没有“网络扩展”| | | | | 非严格模式,带有“网络扩展 | | | | | 严格模式,带有“网络扩展” | | | |
我也不清楚“严格模式”在这种情况下的含义。这种区别似乎在附件 B3.3 中引入,作为函数声明的运行时执行的一些附加步骤的一部分:
1. If strict is false, then
...
但是,据我所知,strict
指[[Strict]]
的是函数对象的内部槽。这是否意味着:
// Non-strict surrounding code
{
function foo() {"use strict";}
}
应该被认为是上表中的“严格模式”吗?然而,这与我最初的直觉相矛盾。
请记住,我最感兴趣的是 ES6 规范本身,而不管实际的实现不一致。