var a = 0;
if(true){
a = 1;
function a(){}
a = 21;
console.log("里面",a);
}
console.log("外部",a);粗略一看,输出都是 21 啊,你以为加个 if(true),大伙就不知道了?
然后,就没有然后了………… “光荣”的答错了! 正确答案:内部是 21,外部是 1; 这个玄妙之处确实就在这个块级作用域 if 里面。 假如我们去掉 if 看题。 var a = 0;
// if(true){
a = 1;
function a(){}
a = 21;
console.log("里面",a);
// }
console.log("外部",a);这道题估计没人好意思去问了,毫无疑问,输出的 a 都是 21 啊。
然而在 JS 里面都说没有块级作用域,那为啥 if 这个块会影响最终结果呢? 大家可以看看原文:https://juejin.im/post/5e933d4a51882573ca3678ef 注:不同浏览对于变量与函数名相同的处理不一样,上面,仅以google浏览器为例。仅做于对于作用域提升的理解学习,现实中一定不要将变量名与函数名重复 |
|
|