<html>
<body>
<script type="text/javascript">alert('a')document.write('uuuuu')alert('b')</script>
</body>
</html>以上代码在it浏览器执行结果是先输弹出a再弹出b,最后才输出uuuuu,
为什么uuuuu不在弹出b之前就输出?

解决方案 »

  1.   

    是先输出的uuuu的 貌似,只不过执行速度快,你没看见uuuu时就弹出b了,之后点击完确定才能看见uuu<script type="text/javascript">alert('a')document.write('uuuuu')window.setTimeout(function(){alert('b');},2000);</script>
    你改成这样试试
      

  2.   

    alert难道不是在js解析的时候就会执行吗?我是说,不包含在函数内部的alert。关注中~~
      

  3.   

    alert 在执行顺序上没有任何特殊,但是是阻塞的
    实际就是模态windows对话框,写过winform程序的该知道
      

  4.   

    谢谢各位!还不太明白,单线程一句挨一句顺序往下执行,一楼中的解释我感觉如果执行飞快,应该是几乎同时看到uuuuu和弹出b,可很明显弹出a后显示空白再弹出b,在b上确定后才看到输出uuuuu。
    四楼能否再说详细点,最好通俗解释下阻塞问题,不了解winform。多谢win7,IE8显示如下
      

  5.   

    阁下的浏览器比较奇葩吧,
    我这里测试win7 和XP的IE8都是正常的
      

  6.   

    document.write('uuuuu')
    alert('a')
    alert('b')LZ这样测试,估计对1楼和4楼的说法更好理解些
      

  7.   

    不会吧,难道大家ie8测试正常,仅我特例? 我又不是谷歌,劳微软大驾专给我浏览器里动手脚?
    11楼,你的代码顺序执行了,先显示uuuuu再弹出a,b。想搞清楚为什么document.write在中间时就不正常了
      

  8.   


    LZ,我给你的测试代码,只是想让你和你自己的做个对比,然后较容易理解些你看1楼和4楼两位朋友的解释就是了在FF,Chrome下你应该可以很容易就看到执行顺序。显示uuuu与弹出第二个对话框几乎是同步的,但其实还是先显示的uuuu在IE8下,其实你还是有机会可以先看到uuuu,然后再弹出第二个对话框的。也就是说,它也是正常的。
    你用你原有的代码按以下方法进行测试:
    1:先分别在IE8和FF打开你的测试页面
    2:先去FF中刷新一次,你可以看到是顺序执行的
    3:再回来IE8中刷新页面,你就可以看到它是顺序执行的了百试百灵,原因嘛,你就当IE8抽抽了就是了。哈哈哈,我这是歪门邪道,只是想告诉你,它们执行顺序其实还是按你的代码里编写的顺序是一样的
      

  9.   

    阻塞意思就是程序在这儿暂停了,就和你调试时打个断点,程序就挺在这儿了,
    很简单的理解方式就是你写两个alert,必定要第一个点击后才会弹出第二个,说明弹出时线程在这儿等待,你可以试试,这时是连浏览器都不能操作的,因为这是浏览器窗口的模态对话框
    那你这儿的现象就好理解了,执行完document.write后,还没来得及更新视图,一个模态窗口出现,浏览器被阻塞,视图无法继续更新,只有等确认后浏览器继续运行,才能更新视图