JS预解析是什么?

JS预解析是什么?
这件事,可以先产生一个思考,浏览器为什么会读我们的JS代码?难道就几行字,他就认识了?

其实在浏览器内部,有一块是专门解析JS数据的,我们可以称之为JS 解析器 。

一旦浏览器 识别到了SCRIPT标签,JS解析器就开始干活了。
这里 JS的解析器至少会做两部分的工作:
1)预解析 | 预解析仓库 = “找东西“(找VAR , FUNCTION 以及参数)
2)逐行解读代码

先上一个简单的代码,大家可以想一下 a在这个时候弹出的是什么?为什么

alert(a);?? //underfind
var a = 10;

bingo! 答案就是underfind但是为什么呢?
就 像我们之前说的,JS 是逐行解读,运行代码的,那么在这之前还有个预解析的过程,
在这个过程中, 所有的变量,在正式运行代码之前,都提前赋了一个值 那就是:未定义。
预解析之后,代码开始运行。
当执行到第一行的时候,他不会先去下面看,他会先到预解析仓库中去看看有没有a,
一看他找到了a,但是a在这个时候是underfined,那么他就输出了underfind.

说完了变量,在看看函数,他弹出的是什么

alert(a);??
function a(){
    alert(1)
    };

和之前变量的预解析一样,只不过在这里 a=function(){alert(1)};
在代码执行之前,a就是整个函数块,
那么上面alert(a) 的内容也很明显了,执行代码的时候,浏览器去预解析仓库中找,发现了function a(),在这个时候function a(){} 就是整个函数块内容
那么他输出的就是 a=function a(){alert(1)};

简单的说完了,在来个进阶部分,代码如下图:

alert(a);??
var a = 1;
alert(a);??
function a(){
    alert(2)
};
alert(a);??
var a = 3;
alert(a);??
function a(){
    alert(4)
};
alert(a);??

大家可以试猜猜看 上面5个alert(a)分别的答案是什么??
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
答案是:
function a(){
alert(4)
}
1;
1;
3;
3;

为什么第三个和第五个 会是1和3呢,因为表达式会改变预解析仓库里的值。

上面是我的一点小小看法,不喜勿喷…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值