js 的变量提升方面的问题求解

2020-09-22 13:44:36 +08:00
 rodrick
  if (true) {
    function a() {}
    a=1
    console.log('in',a);// in 1
  }
  console.log('out',a);// out f a(){}
  if (true) {
    a=1
    function a() {}
    console.log('in',a);// in 1
  }
  console.log('out',a);// out 1

我的理解上 function a() {}都应该提升到最上面,然后再执行 a=1,但是为什么两次的 out 的结果会不一样,第一次的 out 的 a 是什么时候被赋值为 f a(){}的,第二次的 out 又是什么时候被赋值为 1 的,和 if{}块有什么关系么

784 次点击
所在节点    问与答
3 条回复
9tao
2020-09-22 14:30:12 +08:00
这种写法是错误的。ES5 的规范,不得在非函数的代码块中声明函数,严格模式下会直接抛出错误,非严格模式下不同浏览器表现可能都不一样。
rodrick
2020-09-22 18:54:30 +08:00
@9tao 原来是错的啊
9tao
2020-09-22 19:34:00 +08:00
@rodrick 历史问题,这种场景下,可以使用函数表达式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/709387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX