大家都知道javaScript是单线程引擎,当一个事件被触发,将排在执行队列的最后,等待执行。但是我在firefox13.0中测试就不是表现成这一特性。觉得想不通。代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="./js/jquery-1.4.2.min.js" ></script>
<script type="text/javascript">
$(document).ready(function(){
var i=0;
$('#a').bind("click",function(){ var a=setTimeout(clickEvent,1000)});
function clickEvent(){alert('a'+i++);alert('a end');}
$('#b').bind("click",function(){alert('b'+i++);alert('b end');});
});
</script>
</head>
<body>
<a id="a">aaa</a>
<a id="b">bbb</a>
</body>
</html>如果快速的点击aaa后立即点击bbb,可以看到 有一种奇怪的输出情况,输出顺序是b0,a1,a end 和b end,怎么会b点击事件的代码块才执行一半就跳到a点击事件的代码块执行呢?跟js单线程引擎说法不符。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="./js/jquery-1.4.2.min.js" ></script>
<script type="text/javascript">
$(document).ready(function(){
var i=0;
$('#a').bind("click",function(){ var a=setTimeout(clickEvent,1000)});
function clickEvent(){alert('a'+i++);alert('a end');}
$('#b').bind("click",function(){alert('b'+i++);alert('b end');});
});
</script>
</head>
<body>
<a id="a">aaa</a>
<a id="b">bbb</a>
</body>
</html>如果快速的点击aaa后立即点击bbb,可以看到 有一种奇怪的输出情况,输出顺序是b0,a1,a end 和b end,怎么会b点击事件的代码块才执行一半就跳到a点击事件的代码块执行呢?跟js单线程引擎说法不符。
解决方案 »
- 求教:如何读取网页页面指定数据?
- 求教 extjs jsonReader问题
- js对象,成员变量,this,var相关问题
- 可以在FF下运行,但是不能运行在IE和chrome jquery+ajax+php+mysql
- How to open a target new window in current page? Thanks a lot!
- 100分求解 :关于嵌套frame的滚动问题
- alert("测试")为什么弹出的提示框显示测试?
- 如何判断记录位置?
- 100分请教iframe问题!如何屏蔽iframe中的右键?
- 怎么使文字闪动?
- javascript表单验证的问题
- dojo中Editor的样式为什么不显示呢!
那不是以代码块为单位的吗?比如我b已经执行了,就说明b的代码块放在了将要执行队列的前面,而点击b的第一个alert的确定后,a时间到了,那a的回调函数代码块放在了队列的最后,在这也就是b代码块的后面。所以执行应该是b0,b end,a1,a end ?还是不能以函数块为单位。而是以有;的行有单位?为什么线程执行资源会被a抢走?
更正下这个。。我自己写了个代码测试,就是讲楼主的代码复制过去测试,弹出的确实是
b0 b end a1 a end且 ie8 chrome ff 下测试均是如此。请问楼主是如何测试的?使用的是什么浏览器呢?