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

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

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

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

  先来看下正确结果:

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

 

  () 中属于表达式,()() 形式为自执行函数,自执行函数内部可以访问全局变量,但是全局变量不能访问自执行函数的内部变量。

  声明 全局【b】为 10后,程序发现自执行函数,直接执行,此时 的【b】是一个局部的 【b】,指向的是该自执行函数,执行到 b = 20 时,b 未释放,赋值失败,console 打印结果则为函数体。

  最后,函数执行结束,释放局部的【b】,全局的 【b】 依旧是 10。

  这张图可以清晰的看出,e 是局部的e,并不会因为创建了 【function 】 而创建全局的 【e】。

 

posted @ 2021-06-08 22:20  名字不好起啊  阅读(472)  评论(2编辑  收藏  举报