js 一道面试题,有关函数执行逻辑

  跟朋友探讨了一道面试题,具体内容如下:

var b = 10;
(function b() {
  b = 20;
  console.log(b);
})();

  问为什么打印出来的【变量b】 不是20?

  先来看下正确结果:

  是不是第一眼瞅过去觉得有点问题?

  这里涉及到了一个知识点:在JS的预编译期,声明式函数将会先被提取出来,然后再按顺序执行js代码。

  程序发现可直接执行的声明函数,直接执行了函数,此时 【变量b】指向的是该函数,执行到 b = 20 时,b 还在使用中,赋值失败,再 console 的时候自然就是引用的函数表达式了。

  最后,函数执行结束,释放 【变量b】,再顺序执行 js 代码,此时【变量b】赋值为 10 。

原文地址:https://www.cnblogs.com/guofan/p/14864756.html