欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js面试题

程序员文章站 2022-03-22 09:54:52
这里来研究一个前面见的一个面试题,在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 = 10...

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

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

本文地址:https://blog.csdn.net/boohbooh/article/details/111939212

相关标签: javascript