扩展:

  1. 解释为什么打印的是倒数第二个a的值?
    1. var a = 10;
    2. {
    3. a = 99;
    4. function a() {}
    5. a = 30;
    6. }
    7. console.log(a) // 99
    原因:大括号中第一个a本级没有找到声明, 默认是全局(即重写外部的a)。定义完函数a, 产生了块级的a, 即大括号中的a是30;
  1. var a = 10;
  2. {
  3. a = 99;
  4. function a() {}
  5. a = 30;
  6. console.log(a) // 30
  7. }
  1. var a = 10;
  2. console.log(a) // 10
  3. {
  4. a = 99;
  5. function a() {}
  6. a = 30;
  7. }

参考:

https://juejin.im/post/6863025980534063118
http://eux.baidu.com/blog/fe/%e5%a6%82%e4%bd%95%e7%bb%95%e8%bf%87%e9%9d%a2%e8%af%95%e9%a2%98%e4%b8%ad%e7%9a%84%e5%b0%8f%e5%9d%91