如题:
var a = 0;
if(true){
a = 1;
function a(){}
a = 21;
console.log("里面",a);
}
console.log("外部",a);
一开始 我认为结果很简单 就是2个21;
后来用谷歌浏览器 一打印 结果 竟然是:21和1
唯一的解释 预解析的时候 应该是这样的
var a;
a=0;
{
console.log(a,window.a); //function a(){},0
function a(){}
a=1;
console.log(a,window.a); //1,0
window.a = a;
console.log(a,window.a);//1,1
a = 21;
console.log(a,window.a);//21,1
console.log("里面",a); //21
}
console.log("外部",a); //1
从这道题目 我发现 js 在块级作用域中 函数声明的表现是这样的
console.log(a); //undefined
{
function a(){}
console.log(a);
}
console.log(a);