为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript'吊装'

JavaScript'吊装'

翻翻过去那场雪 2019-09-20 17:22:02
我遇到了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个赞

  1. 全局a设定为1

  2. b() 叫做

  3. function a() {}被悬挂并创建一个掩盖全局变量的局部变量aa

  4. 本地a设置为10(覆盖函数a

  5. 全局a(静止1)被警告


查看完整回答
反对 回复 2019-09-20
?
跃然一笑

TA贡献1826条经验 获得超6个赞

这是因为这个例子中的编译/解释顺序有些误导。function a () {}在执行任何其余函数之前解释该行,因此在函数的最开始,a其值为function a () {}。当您重新分配它时10,您将重新分配a函数的本地作用域中的值b(),然后在返回后将其丢弃,并将原始值保留a = 1在全局作用域中。

您可以通过alert()在适当的位置放置s等来验证这一点,以查看a各个点的值。


查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 431 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信