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