挖掘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标签为一块)之间不会变量覆盖。
引用:

浙公网安备 33010602011771号