这段代码放到onload里面写是同样效果

解决方案 »

  1.   

    转向的目标页面为最后一次设置的location.href值。
      

  2.   

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    </head>
    <script defer="defer">
    function doclick(){location.href = 'a.html';
    alert(1)
    location.href='b.html';
    alert(2);
    setTimeout('alert(3)',1);
    }document.getElementById('bb').attachEvent('onclick', doclick);
    </script>
    <body>
    <div id="bb">dd</div>
    </body>
    </html>
    测试上面代码,弹出1,2,3没有, setTimeout是不在栈中吗?
      

  3.   

    setTimeout 已经是另外一个进程了
      

  4.   

    setTimeout本身已经执行,只是它所要求调用的函数并未入栈(就算时间设为0也不会入栈),因为setTimeout的入栈操作也是要在调用栈为空后才执行。
    不过,没试过,先setTimeout,再转向,我马上试试。
      

  5.   

    setTimeout不可能是另外一进程,而且这里也不涉及多线程。
    楼上的可不要再误导人了。准确来理解,它只是延迟入栈时间而已。
    ==
    “栈”指 调用栈。
      

  6.   

    看来入栈时应该有作是否转向的判断,一旦也有转向操作,便会取消一切进栈请求。====================================================如果这句成立,location.href后面的语句应该不能再入栈,就是说不能执行以下的语句才对呀
      

  7.   

    hansonboy(良) 误会我意思了,调用栈是JS解释器维护的,一般进栈的操作是由某事件引起的,是运行时确定的,这个是真难解释清楚的。转向这个动作是应该由浏览器发出的,它要能发出这个动作,必须等JS对已发生事件处理完成,JS如何判断已处理完成呢?全靠调用栈,当调用栈为空时,JS认为事件处理完成,这时若有新事件发生需要入栈,就有判断发生了,如果页面已发生转向事件,则未入栈事件全部禁止入栈。所以,入栈与否是由JS解释器控制的,当事件发生以后,只要处理已入栈,那么在栈内的所有调用都会运行直到栈为空。对本例那也就是说,location.href = "xx.htm";以及之后的代码其实均已入栈,当然就会运行。