var b = 10;
(function b() {
b = 20;
console.log(b);
})();
笔试时遇到了的问题,全局变量,函数,块变量叫了同一个名字,除了问最终打印的是啥,还问如何可以打印出10(全局变量值)和20(块变量值)。
emm....
各个击破。
1.原始程序打印的是啥?是函数。
2.如何打印出20?这个很简单,我们只需要告诉引擎,b是新定义的一个变量就OK了。
不只是let ,还有const和var也可以实现相同的效果。
除此之外,我们还可以把立即执行的函数名去掉。
3.如何打印10?朋友给出的解法是在打印20的基础上做的,去掉立即函数的名字,然后把b=20的移到console下面。
实现是OK的,但我觉得改动有点大,我个人觉得要打印10,只需要告诉程序要打印的是第一行定义的b就可以了,可以从作用域的范围入手,第一个b是顶级作用域,打印时指明时window.b。