js面试题

这里来研究一个前面见的一个面试题,在idea上进行分布解析

var a=30;
{
    a=90;
    function a(){
        console.log(123);
    }
    a=100;
}
console.log(a);//输出结果a=90

然后就没搞明白,我测试了一下全局作用域下面的代码执行顺序

  a=30
  function a() {
    console.log(123)
  }
  console.log(a)//a=30;
  a = 100
  console.log(a)//a=100;
  {
    console.log(a) //function a(){console.log(123)}
    //块级
    a = 90;
    function a() {
      console.log(123)
    }

    console.log(a)//a=90;
    a = 100
  }
  console.log(a);//a=90;

分析一波

 // function a(){}
  a=30;
  function a(){console.log(123)};//因为这个代码在后面未执行,他就直接跳过代码的所有定义区域
  console.log(a)//输出a=30;
  {
    //function a(){console.log(123}//块级作用域下面有变量函数提升,并且会把所以的函数提升到顶部
    console.log(a) //a=function(){}
    a=90;
    function a(){console.log(123)};//此时到块级作用域下面的时候会执行到函数定义的最后一个括号
    a=100;//似乎是因为上面的函数读取了,把这个a的值变成一个常量了,这里他的重新赋值没有成功 a还是等于90
  }
  console.log(a)//当执行完成括号里面的数值后,块级作用域消失,就会把块级作用域下面的变量挂载在全局作用域的
  //的下面,把原来在全局作用域下面的a给顶下去了
  a=80;//挂载在全局下后可以被赋值
  console.log(a)

似乎就是这样,哪位大佬会帮忙解释一下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值