码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript螺纹的问题和答案

时间:2015-09-09 17:17:14      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

要求:

JavaScript是单线程的,有任务队列。比方使用setTimeou(func,secs)来在secs毫秒后向任务队列加入func。可是,setTimeout后面跟一个死循环,那么死循环导致任务被堵塞,也就是说func不能运行。
我想请教一下:死循环在运行的时候,secs毫秒过去的时候,func是否被加入到任务队列中?假设加入了,但JS是单线程的,不是在这个线程中加入的,那在哪里被加入的?求大神解答下,找乐非常多东西,都是和JavaScript高级程序设计上的说法一样.
答:

原因是 JS 是单线程的。可是浏览器是多线程的。甚至是多进程的。
所以。同一个标签页,仅仅有一个解释器。可能iframe有多个吧。。。

加入维护是其它线程干的事,运行是单线程解释器干的事。 就如同Java,有反射机制吧,window 是一个 host宿主对象。也就是他自身使用 C语言实现的。不在 JS的解释器线程控制之内,仅仅是进行交互。所以。。。 你明确了吧,逻辑上JS是单线程,但实际上有非常多个其它的线程在辅助这个解释器。 实现细节上仅仅要能保证单线程的逻辑完整性即可了


关于句柄 handler的一些理解:

句柄。

handler,事实上这个词翻译的挺形象的,尽管不太好理解。 你能够理解成电视机的遥控器,遥控器在手。就相当于获取了电视机这个对象,想让电视机干什么。那就操作这个“电视机对象” 即可。 持久化,一般来说就是指存到数据库;在内存里,就不叫持久化。

重新启动后还光临。那是的持久性。



版权声明:本文博主原创文章,博客,未经同意不得转载。

JavaScript螺纹的问题和答案

标签:

原文地址:http://www.cnblogs.com/hrhguanli/p/4795114.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!