关于js执行的问题,请高手赐教

一天要饭生活又开始啦 2012-10-10 11:18:24
假设页面是这样的
<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是单线程还是多线程,以及什么是单线程执行,什么是多线程执行?
请高手赐教,谢谢!
...全文
197 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我想理解的是这个
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() {
........
}
里面的代码的同时程序执行后面的代码吗?
toury 2012-10-10
  • 打赏
  • 举报
回复
另外,按照你给的那个例子,我猜你是想了解JS的执行顺序吧?简单说一下:
1、JS是描述性语言,是依靠宿主(网页中的脚本宿主就是浏览器内核)进行动态解析执行的;
2、页面加载时执行顺序:
1)加载引用的JS文件
2)扫描引用文件和当前文件中的代码块:就是<script></script>之间的代码。

3、代码解析:
1)当发现代码块中的函数时,如果是定义性的函数就先预处理(不准确的说,类似预编译)一下;遇到赋值式的函数时,就先将函数赋值给变量,并不预处理,等执行的时候才处理。
2) 变量定义赋值
3)执行指定的各类函数
4)响应页面控件的各种事件
泡泡鱼_ 2012-10-10
  • 打赏
  • 举报
回复
单线程的,alert出现时应该也会形成一个阻塞。直到它消失。后面的那些alert才会一个一个的出来
lw5853103 2012-10-10
  • 打赏
  • 举报
回复
alert可以中断代码执行 跟你的断点类似
其他的你上网就能找到大把
toury 2012-10-10
  • 打赏
  • 举报
回复
JS是单线程,它是任务驱动的,就是说,取决于浏览器内核所赋予的任务。具体你可以看看这个链接http://phpv.net/html/1700.html
  • 打赏
  • 举报
回复
js是单线程的。你可以看看setTimeout和AJAX异步。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

不会同时执行多个。

从上往下,按顺序。
[/Quote]

你确定?
诺维斯基 2012-10-10
  • 打赏
  • 举报
回复
会执行,
先暂停,等你点确定后,再执行以后的。

不会同时执行多个。

从上往下,按顺序。
诺维斯基 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

我想理解的是这个
var xmldom = createDocument();
xmldom.async = true;

xmldom.onreadystatechange = function() {
if (xmldom.readyState == 4) {
if (xmldom.parseError != 0) {
alert("An error occurred:\nEr……
[/Quote]

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

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧