理解 ES6 中块级函数的微妙语义
ES6 中块级函数的引入带来了需要彻底理解的复杂性考试。尽管它们遵循严格模式下的块提升和范围限制的规则,但可选的“Web 扩展”条款会造成额外的复杂性。
为了阐明这些语义,请考虑下表,其中概述了各种条件下的块级函数声明:
Mode | Web Extensions | Visible Outside Block | Hoisted | TDZ |
---|---|---|---|---|
Non-Strict, No Extensions | No | Yes, as a var | Yes, to Function and Block | Undefined Before Block |
Strict, No Extensions | No | No | Yes, to Block | N/A |
|非严格,有扩展 |是的 |是的,作为 var |是的,功能和块|函数声明之前未定义 |
|严格,有扩展|是的 |是的,作为 var |是的,要阻止 | N/A |
关键区别在于“严格模式”的概念。在块级函数的上下文中,严格模式是指包含函数声明的块所在的函数(或脚本)的严格性,而不是函数的严格性
在带有 Web 扩展的非严格模式下,如果块中的函数声明的名称与形式参数或词法声明的变量不冲突,则该函数声明被视为“正常”。在这种情况下,附加的 var 声明被提升到封闭的函数作用域,并且函数对象在函数声明求值时被分配给此变量。
此行为反映了以下代码结构:
function enclosing(...) { var compat₀ = undefined; { let compat₁ = function compat(…) { … }; compat₀ = compat₁; } }
因此,该函数在块外变得可见,类似于 var 声明。但是,块内存在额外的块范围绑定。
在严格模式下,无论 Web 扩展如何,块级函数都会提升到块的顶部,并且它们的可见性限制在该块内。
值得注意的是,上述语义可能并不总是直接转化为实际实现。 ES6 实现之间的不一致并不罕见,这突显了理解 ES6 规范本身的重要性,无论实现的变化如何。
以上是在不同的严格模式和 Web 扩展设置下,块级函数在 ES6 中的行为如何?的详细内容。更多信息请关注PHP中文网其他相关文章!