rodrick
V2EX  ›  问与答

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

  •  
  •   rodrick · Sep 22, 2020 · 1592 views
    This topic created in 2066 days ago, the information mentioned may be changed or developed.
      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 replies    2020-09-22 19:34:00 +08:00
    9tao
        1
    9tao  
       Sep 22, 2020
    这种写法是错误的。ES5 的规范,不得在非函数的代码块中声明函数,严格模式下会直接抛出错误,非严格模式下不同浏览器表现可能都不一样。
    rodrick
        2
    rodrick  
    OP
       Sep 22, 2020
    @9tao 原来是错的啊
    9tao
        3
    9tao  
       Sep 22, 2020
    @rodrick 历史问题,这种场景下,可以使用函数表达式
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3902 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 04:15 · PVG 12:15 · LAX 21:15 · JFK 00:15
    ♥ Do have faith in what you're doing.