【发布时间】:2020-12-25 03:44:42
【问题描述】:
Stack Overflow 上有这个答案,以支持在变量声明之前提升 JS 函数声明。它基于非常早期的 Spec 版本。
链接到答案 - Order of hoisting in JavaScript
链接到它所引用的规范 - https://www.ecma-international.org/ecma-262/5.1/#sec-10.5
推理基于第 10.5 节的步骤 8(c)
现在根据现代规范,有人可以告诉我在哪里讨论了这个提升顺序,还是说函数声明在变量声明之前提升仍然相关?
链接到当前规范 - https://www.ecma-international.org/ecma-262/11.0/index.html
【问题讨论】:
-
来自链接主题的答案:“那个顺序真的没那么重要。”这并没有改变。
-
呃,你已经链接了两年前的规范,而不是现在的 :-) 但是描述“提升”的部分仍然是 FunctionDeclarationInstantiation。
-
顺便说一句 tc39.es/ecma262 是 next 规范的当前草案,而不是当前规范。我会避免链接它,因为它经常变化。
-
@Bergi 啊,好吧。您能具体告诉我 FunctionDeclarationInstantiation 的哪一部分说明了顺序吗?很抱歉我不是规范读者,但今天在经历了多个问题之后,我想深入挖掘一下。
-
相关的步骤将是 10、14、27、36。是的,这个规范部分自 ES5.1 以来发生了很大变化,它甚至不再以相同的顺序工作 - 但是结果还是一样的:用函数声明的名字被初始化为那个函数,声明的名字没有被初始化为
undefined。任何事物都无法观察到绑定创建的顺序。
标签: javascript specifications hoisting