V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rodrick
V2EX  ›  问与答

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

  •  
  •   rodrick · 2020-09-22 13:44:36 +08:00 · 965 次点击
    这是一个创建于 1529 天前的主题,其中的信息可能已经有所发展或是发生改变。
      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{}块有什么关系么

    3 条回复    2020-09-22 19:34:00 +08:00
    9tao
        1
    9tao  
       2020-09-22 14:30:12 +08:00
    这种写法是错误的。ES5 的规范,不得在非函数的代码块中声明函数,严格模式下会直接抛出错误,非严格模式下不同浏览器表现可能都不一样。
    rodrick
        2
    rodrick  
    OP
       2020-09-22 18:54:30 +08:00
    @9tao 原来是错的啊
    9tao
        3
    9tao  
       2020-09-22 19:34:00 +08:00
    @rodrick 历史问题,这种场景下,可以使用函数表达式
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:14 · PVG 03:14 · LAX 11:14 · JFK 14:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.