这道题真的困扰我好久了,现在终于解决了,我之前有过思路
和我想的差不多啊,但是我没有想到函数提升之后,会存在一个隐式转换。
下图是我之前的思路
这个是面试题,然后看变量提升之后的代码
<script>
var a = 0 // 全局的 a
if(true){
a = 1
function a(){}
a = 21
console.log(a); // 21
}
console.log(a); // 1
</script>
变量提升的代码
<script>
var a = 0 // 全局的 a
if(true){
function a(){} // 局部的 a
a = 1 // 局部的 a = 1
// function a(){} 隐式转换将 a 的值赋值给 全局 a。
// 全局的 a = 1
a = 21 // 局部的 a 等于 21
console.log(a); // 打印的局部 a 21
}
console.log(a); // 打印的全局 a 1
</script>