首页 > 网站 > 建站经验 > 正文

浅谈Javascr!ipt线程及定时机制

2019-11-02 14:17:39
字体:
来源:转载
供稿:网友

   这篇文章主要介绍了浅谈Javascript线程及定时机制的相关资料,需要的朋友可以参考下

  setTimeout、setInterval的使用

  Javascript api文档

恶搞图片大全[www.62-6.com/1/egaotupian]
中定义setTimeout和setInterval第二个参数意义分别为间隔多少毫秒后回调函数被执行和每隔多少毫秒回调函数被执行。但随着工作经验的积累,我们发现事实并非如此。

  比如

  ?

1 2 3 4 5 div.onclick=function(){ setTimeout(function(){ document.getElementById('input').focus(); },0); }

  就解释不通了,立即执行就立即执行呗,干嘛还要设置个定时兜个圈子呢。

  又有一天你写了下面一段代码

  ?

1 2 setTimeout(function(){while(true){}},100); setTimeout(function(){alert('你好');},200);

  第一行代码死循环,结果造成第二行alert始终没有出现,为啥哩?

  单线程or多线程?

  原来,Javascript引擎是单线程运行的,浏览器只有一个线程在运行JavaScript程序。因为单线程的设计,所以免去了复杂的多线程同步问题。

  当设置一个定时的时候,浏览器会在设定的时间后将你指定的回调函数插入任务序列,而非立即执行。如果设定定时时间为0,表示立即插入任务序列,而不是立即执行,仍然要等队列中任务执行完毕,轮到你,你才执行。

  所以下面代码先弹出2,再弹出1

  ?

1 2 3 4 setTimeout(function(){ alert(1); },0); alert(2);

  那么,这又有什么实际用途呢?且看下面示例

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>setTimeout 0</title> </head> <body> 输入字符,但内容却不能实时显示<input type="text" onkeydown="show(this.value)"/> <br/> 输入字符,内容能实时显示<input type="text" onkeydown="var self=this;setTimeout(function(){show(self.value)},0)"/> <div></div> <script> function show(val){ document.getElementsByTagName("div")[0].innerHTML=val; } </script> </body> </html>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表