【发布时间】:2021-03-27 09:32:18
【问题描述】:
大家好,我遇到了这个问题
function test() {
test2();
if (true) {
function test2() {
console.log(a);
}
let a = 4;
}
}
我检查了调试器以找出它的行为方式
我已经看到 test2 函数被提升了,但它被设置为 undefined
我的问题是为什么?当一个函数不在一个块内并且我在声明之前调用它时,由于创建阶段它会起作用,那么为什么在这种情况下它不起作用呢?
【问题讨论】:
-
因为如果你在另一个可见区域声明它就不能使用函数
-
@СергейПетрашко - 比这更复杂。 :-) 在 OP 的代码中,他们可以使用
test2afterif块,假设它们处于松散模式(上面没有"use strict",但据我所知它是模块代码和已经严格)。 -
@T.J.Crowder ,我同意你的看法!我写那个是为了给方向)
-
您正在调用一个尚不存在的函数。这就是js的工作方式。这完全是关于上下文和范围,逐行执行并填充范围。
标签: javascript