您的位置:首页 > Web前端 > JavaScript

JavaScript螺纹的问题和答案

2015-09-09 16:24 519 查看
要求:

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

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

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


关于句柄 handler的一些理解:

句柄。

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

重新启动后还光临。那是的持久性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: