日期:2014-05-16  浏览次数:20461 次

关于js执行的问题,请高手赐教
假设页面是这样的
<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是单线程还是多线程,以及什么是单线程执行,什么是多线程执行?
请高手赐教,谢谢!

------解决方案--------------------
探讨

会执行,
先暂停,等你点确定后,再执行以后的。

不会同时执行多个。

从上往下,按顺序。

------解决方案--------------------
js是单线程的。你可以看看setTimeout和AJAX异步。
------解决方案--------------------
JS是单线程,它是任务驱动的,就是说,取决于浏览器内核所赋予的任务。具体你可以看看这个链接http://phpv.net/html/1700.html
------解决方案--------------------
alert可以中断代码执行 跟你的断点类似
其他的你上网就能找到大把
------解决方案--------------------
单线程的,alert出现时应该也会形成一个阻塞。直到它消失。后面的那些alert才会一个一个的出来
------解决方案--------------------
另外,按照你给的那个例子,我猜你是想了解JS的执行顺序吧?简单说一下:
1、JS是描述性语言,是依靠宿主(网页中的脚本宿主就是浏览器内核)进行动态解析执行的;
2、页面加载时执行顺序:
1)加载引用的JS文件
2)扫描引用文件和当前文件中的代码块:就是<script></script>之间的代码。

3、代码解析:
1)当发现代码块中的函数时,如果是定义性的函数就先预处理(不准确的说,类似预编译)一下;遇到赋值式的函数时,就先将函数赋值给变量,并不预处理,等执行的时候才处理。
2) 变量定义赋值
3)执行指定的各类函数
4)响应页面控件的各种事件