Javascript 按照现代规范,JS中的提升顺序(函数声明与var声明)是什么?

Javascript 按照现代规范,JS中的提升顺序(函数声明与var声明)是什么?,javascript,specifications,hoisting,Javascript,Specifications,Hoisting,堆栈溢出问题的答案是支持JS函数声明先于变量声明。它基于非常早期版本的规范 链接到答案- 链接到它引用的规范- 推理基于第10.5节第8(c)步 现在,根据现代规范,有人能告诉我在哪里讨论提升顺序,或者说函数声明在变量声明之前被提升,这仍然是相关的吗 链接到当前规范-我认为关于函数dec与变量dec的提升顺序的争论没有多大关系。功能DEC在创建阶段完全存在于内存中。只有当与函数同名的var声明被赋值时,函数声明才不再有效。但若只有一个与函数同名的var声明,那个么它是无效的。 (这实际上是早

堆栈溢出问题的答案是支持JS函数声明先于变量声明。它基于非常早期版本的规范

链接到答案-

链接到它引用的规范-

推理基于第10.5节第8(c)步

现在,根据现代规范,有人能告诉我在哪里讨论提升顺序,或者说函数声明在变量声明之前被提升,这仍然是相关的吗


链接到当前规范-

我认为关于函数dec与变量dec的提升顺序的争论没有多大关系。功能DEC在创建阶段完全存在于内存中。只有当与函数同名的var声明被赋值时,函数声明才不再有效。但若只有一个与函数同名的var声明,那个么它是无效的。 (这实际上是早期规范的一部分) 按照现代规范,从那时起,顺序似乎并不重要
声明从未真正向上移动。它实际上是在执行阶段之前存在于内存中的。这就是为什么函数之前的var或函数之前的var声明不会有什么区别。

从链接主题的答案来看:“顺序真的没那么重要。”这一点没有改变。呃,你链接了两年前的规范,不是当前的规范:-),而是“提升”部分描述仍然是。顺便说一句,这是下一个规范的当前草案,而不是当前规范。我会避免链接它,因为它经常更改。@Bergi啊,好的。您能具体告诉我FunctionDeclarationInstallation的哪一部分这样说明顺序吗?很抱歉,我不是一个规范阅读者,但今天在经历了多个问题之后,我想再深入一点。相关步骤是10、14、27、36。是的,自ES5.1以来,这个规范部分已经发生了很大的变化,它甚至不再以相同的顺序工作-但结果仍然是一样的:带有函数的声明名称初始化为该函数,没有初始化的声明名称初始化为
未定义的
。任何东西都无法观察到绑定创建的顺序。“函数DEC在创建阶段完全存在于内存中”-不完全是,函数声明是在“创建阶段”创建的。嘿@Bergi,你可以忽略这个答案(这是我在我们的js讨论组中分享的。有人为了好玩而复制粘贴在这里。)