前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >临时拼凑的知识点**想想面试还会有啥

临时拼凑的知识点**想想面试还会有啥

作者头像
gojam
发布2019-06-17 13:44:12
5650
发布2019-06-17 13:44:12
举报
文章被收录于专栏:gojam技术备忘录

微任务和宏任务

代码语言:javascript
复制
setTimeout(_ => console.log(4))//delay的默认值为0

new Promise(resolve => {
  resolve()
  console.log(1)
}).then(_ => {
  console.log(3)
})

console.log(2)

这段代码的顺序是1、2、3、4,原因是js同步执行完任务前不会执行异步任务(这是很容易理解大家也应该知道的)。然后Promise对象实例化是一个同步的过程,只有then后面的才是异步。所以1,2是同步任务,3,4是异步任务,现在的顺序就很合理了。

不过,3明明在4后面,怎么还先输出呢?这是因为微任务会在宏任务之前执行,Promise.then就是典型的微任务,注意是.then,不是Promise本身。

为了避免混淆,有必要指明一下,宏任务、微任务与同步、异步并不直接对应。

目前比较公认的说法是,I/O和setTimeout和setInterval是宏任务,而微任务包括但不限于Promise.then和catch和finally。

Event-loop

那么Event-loop是什么意思?这个概念只和微任务宏任务有关,即每次做完一个任务都会检查:现在还有没有微任务呢~没有的话就开始做宏任务了哦~等下一波检查才有机会执行微任务咯

async和await

新的异步机制,await之前同步,await之后异步,await可以理解为then。至于异步呢,常用于等待获取文件或资源。

观察者模式和发布-订阅模式

观察者模式

一般的实现是一个对象维护一个列表,发生事件时通知列表中的对象。

发布-订阅模式

和观察者模式类似,但发生事件时发布者通知订阅者,由订阅者通知对象。发布订阅模式更容易解藕、异步、缓存、过滤。

JS中的实现

JS提供setter和getter实现此机制(实现watch)。

Object.defineProperty提供了更多属性的配置。

代码语言:javascript
复制
var language = {
  set current(name) {
    this.log.push(name);
  },
  log: []
}

language.current = 'EN';
language.current = 'FA';

console.log(language.log);
// expected output: Array ["EN", "FA"]

HTTP/2

HTTP请求资源时一个一次连接,HTTP/2改为持续性连接。

服务器可以主动发起推送。

通过设置优先级避免关键请求导致阻塞。

明文传输变为二进制帧传输,不过我也不知道1.0和1.1是不是用的ASCII码和MIME。

事件流

分为冒泡和捕获。冒泡向上,捕获向下。

Viewport

往期文章

Arguments

函数接受的任意长的参数数组,但不是普通数组。它的存在也意味着js函数可以接受任意多个参数,且没有重载的说法。可以用Array.from()转换为数组。

Bind

引用方法时会失去与对象的连接,bind的作用是绑定对象。

盒子模型

太基础了

箭头函数

不能用new,this值为上下文且固定,没有arguments

requestAnimationFrame

每次绘制一帧前都向回掉函数发送时间戳,并执行回掉函数。

apply和call

改变this,一个是参数数组,一个传很多参数,实质都一样

DI和AOP

AOP,Aspect Oriented Programming 面向切面的程序设计

AOP即不修改源代码增加功能,通过预编译和动态代理实现

DI 依赖注入,实现IoC控制反转 和结构层次化、接口有关 就是定义下层接口,通常用于插件

“防抖”(Debouncing)和“节流”(Throttling)

防抖和节流,即限制事件在一定时间内的发生次数,或者说把多次事件合并为一次,这个可能经常用过但不知道叫防抖,通常用在响应特别频繁的事件上。

他们的区别在于,防抖一般等所有事件完了再响应,节流是以一定频率响应。

这个可以和requestAnimationFrame放到一起考虑。

文章导航

Cannot find module 'babel-preset-es2015'与Plugin/Preset files are not allowed to export objects, only functions.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年6月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微任务和宏任务
    • Event-loop
      • async和await
      • 观察者模式和发布-订阅模式
        • 观察者模式
          • 发布-订阅模式
            • JS中的实现
            • HTTP/2
            • 事件流
            • Viewport
            • Arguments
            • Bind
            • 盒子模型
            • 箭头函数
            • requestAnimationFrame
            • apply和call
            • DI和AOP
            • “防抖”(Debouncing)和“节流”(Throttling)
            • 文章导航
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档