我遇到了JavaScript'hoisting',我没有弄清楚这段代码是如何起作用的:var a = 1;function b() { a = 10; return; function a() {}}b();alert(a);我知道像(function a() {})这样的函数声明将被提升到函数b作用域的顶部,但是它不应该覆盖a(因为函数声明覆盖变量声明而不是变量初始化)的值,所以我期望警报的值会是10而不是1 !!
3 回答

回首忆惘然
TA贡献1847条经验 获得超11个赞
全局
a
设定为1
b()
叫做function a() {}
被悬挂并创建一个掩盖全局变量的局部变量a
a
本地
a
设置为10
(覆盖函数a
)全局
a
(静止1
)被警告

跃然一笑
TA贡献1826条经验 获得超6个赞
这是因为这个例子中的编译/解释顺序有些误导。function a () {}
在执行任何其余函数之前解释该行,因此在函数的最开始,a
其值为function a () {}
。当您重新分配它时10
,您将重新分配a
函数的本地作用域中的值b()
,然后在返回后将其丢弃,并将原始值保留a = 1
在全局作用域中。
您可以通过alert()
在适当的位置放置s等来验证这一点,以查看a
各个点的值。
添加回答
举报
0/150
提交
取消