js预解析

JS的预解析过程:

1,预解析

2,再逐行解读代码,

实例:

<script>
var name="xm";
var age=18;
function fn(argument){
console.log(name);//输出未定义:undefined
var name="xh";
var age=12;
}
</script>

解析:

全局作用域,局部作用域,都是通过以下两个步骤进行预解析的。

1,先读取有var 的变量(没有使用var的变量是不会被预解析的),给赋值为:undefined。如果两个变量重名,并不影响预解析的过程,就写一个变量就行,因为都将变量赋值为undefined(在逐行读取时,只是不同的赋值而已。),如果有函数名和变量重名,那就直接去掉变量,不进行解析。如果函数中存在参数,那么参数也一样使用var进行解析。如:var argument=undefined;
2,再读取function后面的函数—fn,如果有多个函数名重复,那么取最后面一个函数进行声明。

上面实例有两个作用域,一个是window变量对象的全局作用域,一个是fn变量对象的局部作用域。

预解析过程如下:

/*1,window:*/

  var name=undefined;

  var age=undefined;

  function fn(argument){
console.log(name);
var name="xh";
var age=12;
}

/*2,fn:*/

  var name=undefined;

  var age=undefined;

  var argument=undefined;

预解析就完成了。然后就是逐行解读代码。

通过逐行解读代码进行赋值,改变变量属性值。如果遇到函数,那么就直接跳过,因为预解析时已经声明过。

所以,上面实例:console.log(name); 输出为: undefined。
预解析案例:
在这里插入图片描述代码解析过程,以上代码可以看成:
在这里插入图片描述

输出结果:
在这里插入图片描述这位同学讲的挺清楚的:https://blog.csdn.net/u014205965/article/details/45620607
参考链接:https://www.cnblogs.com/Knowledge-is-infinite/p/10623172.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值