CC
2019-10-11
Javascript 是单线程+事件驱动,单线程就是主线程。Javscript 必须让主线程一直处于运行当中,才能实现事件驱动。它无法通过简单的 sleep 主线程来达到 sleep 后继续执行某件事目的。
以上是我的理解,不确定是否有误。
作者回复: 👍
3
丁丁历险记
2019-10-21
一个讨厌js 的后端路过。。。
pyhhou
2019-10-15
1. 我现阶段做的东西比较杂,写后端,也写点前端,前后端都用 JavaScript 来写。感觉自己对前端技术的认知还只停留在表面,仅仅可以使用一些框架,照着 doc 来实现指定的页面而已,前端的基础并不牢固,很希望跟着老师学习前端中的思想层面的东西,特别是 DOM 树和页面的具体关联,HTML、CSS、JS 这三驾马车如何相互关联,进行信息传递和页面的展示的,以及前端上一些类似后端 MVC 一类的经典设计模式等等,很是期待这一章的内容。
2. 这是一个很好的问题,这个问题说到了 JavaScript 和传统语言的区别。JavaScript 设计的初衷仅仅是解决页面上的事件的驱动和响应,这里举个例子,假设在一个页面上有输入框、下拉框、勾选框、取消按钮,用户可以在页面上任意操控这 4 个东西,这 4 个东西之间并不存在任何的先后顺序和逻辑关系,任何一个事件都可以发生在其他事件之前,这取决于用户的实际操作,如果把这四个组件的实现放在一起,你可以看到对应的代码并不是顺序执行的,我们想要看到的是一个组件的执行不会影响到其他组件,这在传统的语言中可以用多线程来做到,但是文章中也提到了 JavaScript 是单线程的,如果使用 sleep,那么唯一的线程会被阻塞,一个组件的执行会影响到其他组件执行,因此不可取。而消息队列的方式,让我们把程序的最小运行单元看成是一个个的事件,程序的运行顺序是和事件的发生顺序相关联,而不是我们传统观念中认为的 “代码行顺序”。
展开
作者回复: 第二点说得非常好,👍
1
不记年
2019-10-12
思考题的第二个, 我觉得应该是因为js是单线程的,如果设置sleep的话,就是阻塞唯一的线程,而又没有一个监视线程去pull。而且按照事件驱动编程的逻辑,如果想sleep当前正常执行的事件的话,应该也使用事件回调的方式,这样就只阻塞事件而不是线程。
作者回复: 👍
不记年
2019-10-12
我所理解的js 执行过程分为两部分,第一部分是做一些初始化的工作, 初始化工作包括初始化一些参数之类的,以及告知浏览器事件以及触发的逻辑。第二部分是事件循环,不断地往事件队列中抓取事件执行。在这整个过程中。
joker
2019-10-11
他是执行哪段代码出的underfined
作者回复: console.log("4");
1
tt
2019-10-11
我一直从事后端开发,但是经过了几个Web项目后,对前端的认识发生了转变,真的就像老师文中所说的那样。这个感触在直接面向用户时尤其明显,感觉连原有的部门开发流程都不适应了。
至于为什么没有sleep,是不是因为sleep里指定的时间只对事件分发线程有效,而真正被JavaScript执行线程从事件对列中取出来执行时,时间已经非常不准确了。
作者回复: 第二问不太正确,你可以联系文中介绍的 event loop 再想想。
許敲敲
2019-10-11
Web developer ,工作中就是开发公司的组件库,客户报defect 去fix 。想说前端水好深, WebGL ,tensorflow.js ,webassembly 这些技术都好强悍
我们在线,来聊聊吧
✕
您好,当前有专业客服人员在线,让我们来帮助您吧。
我们在线,来聊聊吧