我遇到了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设定为1b()叫做function a() {}被悬挂并创建一个掩盖全局变量的局部变量aa本地
a设置为10(覆盖函数a)全局
a(静止1)被警告
跃然一笑
TA贡献1826条经验 获得超6个赞
这是因为这个例子中的编译/解释顺序有些误导。function a () {}在执行任何其余函数之前解释该行,因此在函数的最开始,a其值为function a () {}。当您重新分配它时10,您将重新分配a函数的本地作用域中的值b(),然后在返回后将其丢弃,并将原始值保留a = 1在全局作用域中。
您可以通过alert()在适当的位置放置s等来验证这一点,以查看a各个点的值。
添加回答
举报
0/150
提交
取消
