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】。