挖掘javascript高级属性——预解析
javascript的执行过程分为两个阶段:
1.进入执行上下文(预解析[hoisting]);
2.执行代码;
“预解析”:JavaScript引擎会优先解析var变量和function定义。在预解析完成后,才会执行代码
先看两段代码,例1-1:
var a = 1;
function fun(){
alert(a);
var a = 2;
}
a = 10;
fun();
执行结果是(点击查看):
例1-2:
if (!("a" in window)) {
var a = 1;
}
alert(a);
执行结果是(点击查看):
这两个问题如果你都答对了,我相信你至少已经对js执行过程有所了解。
既然我们了解了它的执行过程是:先预解析,再执行。预解析时,搜索当前作用域内变量定义(variable declaration)和函数定义(function declaratioin),再执行代码。我们再看看关于预解析的例子.
例1-3:
<script type="text/javascript">
fun();
function fun(){
alert('fun 1');
}
function fun(){
alert('fun 2');
}
</script>
执行结果是(点击查看):
例1-4:
<script type="text/javascript">
fun();
function fun(){
alert('fun 1');
}
function fun(){
alert('fun 2');
}
</script>
<script type="text/javascript">
function fun(){
alert('fun 3');
}
</script>
执行结果是(点击查看):
为什么?为什么都是fun 2,要说1-3是fun2 还能理解,因为js存在预解析,后面定义的function把前面定义的给覆盖了。至于1-4为什么会这样。其实在预解析时,js的块(一对script标签为一块)之间不会变量覆盖。
引用:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步