创建一个html文件内容如下:
<script >
function A()
{
alert(1);
}
A();
function A()
{
   alert(99);
}
A();
A=function(){
alert(3);
}
A();
</script>
执行看alert的结果!为什么不alert为1的值?请专家详细解释下! 谢谢...

解决方案 »

  1.   

    第一个 第二个都是99 第三个是3对吧
    js代码顺序之前遍历该代码段,将其中的function放到一个字典表里。存在内存中
    所以后面的function A()已经在第一次调用A()的时候覆盖了第一个而A = function()的定义方法则不会在预处理的时候加进去。所以只有在顺序执行到此的时候才会重写A
    因此只有最后一次调用的时候值为3step1. 读入第一个代码段
    step2. 做语法分析,有错则报语法错误(比如括号不匹配等),并跳转到step5
    step3. 对var变量和function定义做“预解析”(永远不会报错的,因为只解析正确的声明)
    step4. 执行代码段,有错则报错(比如变量未定义)
    step5. 如果还有下一个代码段,则读入下一个代码段,重复step2
    step6. 结束