【发布时间】:2020-02-28 23:12:06
【问题描述】:
我正在学习 JS,我很好奇为什么一个函数可以在定义之前被调用并且运行良好。我知道这是由于提升,其中代码被预先扫描以在范围内引入声明的变量和函数。
如果只是将这些实体的声明纳入范围,为什么函数调用在其定义之前被调用时也不返回 undefined(或类似的东西)——就像变量一样?
【问题讨论】:
-
可能用于代码组织目的。您可以在文件底部定义一个函数并在顶部调用它。但是用变量来做这件事就没那么有意义了。虽然我不能说这是设计时使用的确切推理。
-
另外,只是指出 - 变量定义被提升。这就是为什么你得到
undefined而不是ReferenceError: <variable> is not defined。直到实际的var variable = "some value"行才处理分配。 -
第一条评论是有道理的,但我不同意第二条。在这个语句中“var x = 5;”如果 x 之前被访问过,它会说 undefined ;这意味着没有提升确切的定义。因为它没有给出参考错误,我会说它是被提升的声明。因为如果语句是“var x”
-
@nikel 我认为第二条评论是正确的。
var声明被提升,分配没有。 -
@VLAZ 我认为您总体上是对的,但是如果该变量引用了一个函数,则该变量将有意义
标签: javascript function variables hoisting