console.log(window.a ,a ) // 1 [function:a]
解析:此时的a是块级作用域里函数的提升。
a= 10
console.log(window.a , a ) // 1 10
解析: 因为块级作用域里有了变量a ,这里直接对函数a进行重新赋值,但并不影响全局作用域里面的a
function a (){
}
console.log(window.a , a) //10 10
解析:当解析完函数的定义后,跨级作用域里的函数a将会挂载到全局作用域里面,而之前已对函数a进行了重新赋值,所以此时的全局a为10
}
console.log(a) // 10
情况二 块级作用域内函数在变量前
if(true){
console.log(window.a , a ) // undefined [Function:a]
解析:函数的提升
function a(){
}
console.log(window.a, a ) // [Function:a] [Function:a ]
解析:解析完函数后直接挂载到全局作用域里面。
a =10
console.log(window.a , a ) // [Function:a] 10
解析:块级作用域里面有了变量a,此时的a直接将其覆盖掉。
}
console.log(a) // [Function:a]