JavaScript执行顺序问题

来源:百度知道 编辑:UC知道 时间:2024/09/24 17:15:16
大家好,我将以下代码放入html文件的<head>标签里执行:
<script>
function A()
{
alert(1);
}
A();
function A()
{
alert(2);
}
A();
A=function(){
alert(3);
}
A();
</script>

执行结果的弹出框分别是:2,2,3
请问下第一个A()调用为什么会弹出2?
而第二个A()调用也弹出2,为什么不是弹出3呢?
谢谢

凡是使用function FunctionName(){}这种方式定义的函数,浏览器会预先把他们提取出来分析,然后再执行其他的代码。
当你定义了两个相同的函数时,后面的会覆盖前面的。
详细如下(为了方便说明,我加了行号):
<script>
1 function A(){alert(1);}
2 A();
3 function A(){alert(2);}
4 A();
5 A = function(){alert(3);}
6 A();
</script>

执行的顺序:
1行 >> 3行 >> 2行 >> 4行 >> 5行 >> 6行;
因为浏览器会预先执行function ***(){};这样的代码。所以执行完第一行就继续寻找类似“function ***(){};”这样结构的代码,因此上例就跳过第二行执先行了第三行,当执行完第三行时,第一行定义的function A已经被第三行覆盖。而第5行虽然A的值是一个函数,但是它是以变量的形式声明的,因此不会被预先执行。也就是说只有以function关键字开头声明的函数会被预先执行。