js 块级作用域函数提升

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值