用户登录
用户注册

分享至

js面试题

  • 作者: 正宗卖男孩的小火柴
  • 来源: 51数据库
  • 2021-08-11

这里来研究一个前面见的一个面试题,在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)

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

软件
前端设计
程序设计
Java相关