JS知识体系构建--持续更新

来源:互联网 发布:stussy淘宝 编辑:程序博客网 时间:2024/06/12 19:39

1、单线程、执行栈,任务队列、回调函数
这里写图片描述
在此声明,此图为网上拷贝,原作者不详,在此表示对原作者的敬意。

单线程: js只有一个处理任务的线程,称为主线程。一个线程在同一时间只能处理一个任务。说到底,js在同一时间只能执行一个任务。因为JS运行在浏览器中,是单线程的,每个window一个JS线程。
执行栈:用于存放将要被执行的函数或代码。这样说并不准确,详情参考Stack栈、JavaScript变量——栈内存or堆内存
任务队列: Event Loop,异步的代码在处理完成后会将回调函数添加到任务队列。
回调函数:事件处理完成后才执行的函数。
平台代码:引擎或者环境和Promise的实施代码,也就是他们内部的代码的逻辑或者叫处理任务的逻辑。

js它可以调用平台的API。JS线程,只是平台分配的多个线程中的一个,因此,浏览器的行为中JS线程只是其中一部分,用来与用户交互,因此,JS线程不是一个人在战斗,当我处理不过来的时候,我就用webAPI告诉平台“兄弟,来帮我整一下这个”,平台干完了那一部分,就将剩余的部分(回调函数)给JS线程”:哥们儿,我把我把部分搞完了哈,其他的你自己慢慢弄!”。这时候,JS线程有可能还在忙活其他的事情,平台把剩余的部分放在等待区(任务队列)就走了。等js线程空了,“耶,这兄弟搞得快哦,任务没完成,算了,今天不能回家陪美娇娘了,继续干活儿。”它又把任务队列的任务拿过来继续敲打,循环往复,直到所有事情干完为止。

这里讲完了js线程怎么干活,可是平台拿到异步任务怎么处理的呢。macro-task,micro-task,理解不深,不敢随便发言,以后更新。

2、this

  • 构造函数中的this:要解释这个this,就要搞清楚构造函数创建实例的时候都经历了那些步骤。
    • 1、new操作符创建了一个新的空对象{}
    • 2、将这个构造函数的执行的作用域绑定到新对象
    • 3、执行构造函数
    • 4、将实例的constructor属性指向构造函数,将实例的_proto_属性指向原型
    • 5、返回新对象

结论:因此这里的this指向的是实例

0 0