JavaScript单线程的疑问与解答

简介: 问:JavaScript是单线程的,有任务队列,比如使用setTimeou(func,secs)来在secs毫秒后向任务队列添加func。但是,setTimeout后面跟一个死循环,那么死循环导致任务被阻塞,也就是说func不能执行。

问:

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

原因是 JS 是单线程的,但是浏览器是多线程的,甚至是多进程的。
所以,同一个标签页,只有一个解释器。可能iframe有多个吧。。。
添加维护是其他线程干的事,执行是单线程解释器干的事。
就如同Java,有反射机制吧,window 是一个 host宿主对象,也就是他自身使用 C语言实现的,不在 JS的解释器线程控制之内,只是进行交互,所以。。。 你明白了吧,逻辑上JS是单线程,但实际上有很多个其他的线程在辅助这个解释器。
实现细节上只要能保证单线程的逻辑完整性就行了


关于句柄 handler的一些理解:

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


目录
相关文章
|
9月前
|
JavaScript 前端开发
js单线程、同步、异步
什么是单线程?同步、异步的产生?
84 0
|
9月前
|
前端开发 JavaScript
单线程JavaScript为何如此高效
什么是js执行机制 JavaScript 的执行机制指的是 JavaScript 代码在运行时的工作方式和顺序
47 0
|
9月前
|
存储 JavaScript 前端开发
人人都能看懂的JavaScript单线程的那点事
人人都能看懂的JavaScript单线程的那点事
|
存储 JavaScript 前端开发
单线程的 【JavaScript】 是如何管理任务的
单线程的 【JavaScript】 是如何管理任务的
48 0
单线程的 【JavaScript】 是如何管理任务的
|
前端开发 JavaScript API
🍉如何理解单线程的JavaScript及其工作原理|8月更文挑战
🍉如何理解单线程的JavaScript及其工作原理|8月更文挑战
132 7
🍉如何理解单线程的JavaScript及其工作原理|8月更文挑战
|
消息中间件 Web App开发 存储
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务
关键词:多进程、单线程、事件循环、消息队列、宏任务、微任务
浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务
|
消息中间件 JavaScript 前端开发
深入理解Javascript单线程谈Event Loop
深入理解Javascript单线程谈Event Loop
149 5
|
消息中间件 Web App开发 移动开发
JS是单线程,你了解其运行机制吗?
JS是单线程,你了解其运行机制吗?
145 0
JS是单线程,你了解其运行机制吗?
|
Web App开发 JavaScript 前端开发
Javascript定时器(一)——单线程
可以从下面的代码中看到,第一个用setTimeout中的代码是死循环,由于是单线程,下面的两个定时器就没机会执行了。
Javascript定时器(一)——单线程
|
JavaScript 前端开发 程序员
好程序员web前端培训分享如何理解JS的单线程
好程序员web前端培训分享如何理解JS单线程,JS本质是单线程的。也就是说,它并不能像JAVA语言那样,两个线程并发执行。 但我们平时看到的JS,分明是可以同时运作很多任务的,这又是怎么回事呢? 首先,JS的代码,大致分为两类,同步代码和异步代码。
851 0