js中{}中声明函数和在全局上下文中声明函数是不一样的。
{
function a()
a=1;
}
console.log(a);//[function:a]
为什么答案是[function:a] ,而不是1?
{
a=1;
function a(){}
}
console.log(a);//1
为什么答案是1 ,而不是 [function:a]?
在网上找了各种资料,对这个解释比较好理解。
1.在{}里的function也会提升,提升到全局和代码块顶部,并新建局部作用域。
2.当执行到function的声明语句,会把声明语句之前的值赋值给全局。
3.之后的赋值全是在局部作用域中进行。
//第一题的携程伪代码就是
var a=funtion(){}//函数提升
{
let a=funtion (){}
window.a=a; //此时a是function window.a就是function
a=1; //局部a=1
}
console.log(a);//[function:a] 全局a就是
//第2题的携程伪代码就是
var a=funtion(){}//函数提升
{
let a=funtion (){}//函数提升
a=1; //局部a=1
window.a=a;//当代明运行到申明语句 吧局部变量赋值给全局变量 此时a=1,window.a=1
}
console.log(a);//1 全局a就是window.a=1