假设页面是这样的
<div id="divId">x</div>
<script type="text/javascript">
document.getElementById("divId").onclick = function() {
    alert("divs");
}
alert(1);
alert(1);
alert(1);
alert(1);
alert(1);
alert(1);
alert(1);
alert(1);
alert(1);
alert(1);
</script>
假设刚加载完document.getElementById("divId").onclick = function() {
    alert("divs");
}
这句,我就点击了divId,那么肯定会弹出divs,问题是弹出divs后,后面的alert(1)还执行吗?它是在弹出divs的同时再去执行后面的语句还是弹出divs后就暂停执行后面的语句了,直到弹出divs后再执行后面的语句还是弹出divs后点击了alert对话框的确定后再执行后面的alert语句?
我的意思是当有一个事件发生时后面的程序还会和事件同时执行吗?
js是单线程还是多线程,以及什么是单线程执行,什么是多线程执行?
请高手赐教,谢谢!

解决方案 »

  1.   

    js是单线程的。你可以看看setTimeout和AJAX异步。
      

  2.   

    JS是单线程,它是任务驱动的,就是说,取决于浏览器内核所赋予的任务。具体你可以看看这个链接http://phpv.net/html/1700.html
      

  3.   

    alert可以中断代码执行 跟你的断点类似
    其他的你上网就能找到大把
      

  4.   

    单线程的,alert出现时应该也会形成一个阻塞。直到它消失。后面的那些alert才会一个一个的出来
      

  5.   

    另外,按照你给的那个例子,我猜你是想了解JS的执行顺序吧?简单说一下:
    1、JS是描述性语言,是依靠宿主(网页中的脚本宿主就是浏览器内核)进行动态解析执行的;
    2、页面加载时执行顺序:
    1)加载引用的JS文件
    2)扫描引用文件和当前文件中的代码块:就是<script></script>之间的代码。3、代码解析:
    1)当发现代码块中的函数时,如果是定义性的函数就先预处理(不准确的说,类似预编译)一下;遇到赋值式的函数时,就先将函数赋值给变量,并不预处理,等执行的时候才处理。
    2) 变量定义赋值
    3)执行指定的各类函数
    4)响应页面控件的各种事件
      

  6.   

    我想理解的是这个
    var xmldom = createDocument();
    xmldom.async = true;xmldom.onreadystatechange = function() {
    if (xmldom.readyState == 4) {
    if (xmldom.parseError != 0) {
    alert("An error occurred:\nError Code: "
    + xmldom.parseError.errorCode + "\n"
    + "Line: " + xmlcom.parseError.line + "\n"
    + "Line Pos: " + xmldom.parseError.linepos + "\n"
    + "Reason: " + xmldom.parseError.reason); } else {

    alert(xmldom.documentElement.tagName); //"root"
    alert(xmldom.documentElement.firstChild.tagName); //"child"

    var anotherChild = xmldom.createElement("child");
    xmldom.documentElement.appendChild(antherChild); var children = xmldom.getElementsByTagName("child");
    alert(chilren.length); //2

    alert(xmldom.xml);
    }
    }
    };
    xmldom.load("example.xml");
    这个是异步加载的,也就是不等xmldom.load("example.xml");执行完,就会执行后面的代码,我不明白的是,当xmldom.load("example.xml")加载完成时,即xmldom.readyState == 4时,就会执行xmldom.onreadystatechange = function() {
        ........
    }
    里面的代码,但是在执行xmldom.onreadystatechange = function() {
        ........
    }
    里面的代码的同时程序执行后面的代码吗?
      

  7.   

    执行xmldom.onreadystatechange = function(){....}时不会执行其他代码。
    异步加载指的的是执行xmldom.load()后会去执行其他任务。但当得到返回消息readyState ==4后,就开始回到onreadystatechange方法的回调函数里处理内部代码。这些你可以参考我4楼给你的链接