题目概览
- 回调考查
- 同步异步
- 微任务与宏任务
- 原始值引用值
- ES6 symbol考查
- 隐式转换考查
- this考查
- 字符串知识点汇总
- ES6 proxy考查
- 分辨率适配方案
题目详解
题目一
「回调函数」
官方文档解释:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.
定义:js中函数是一个引用数据类型,所以我们传入的不可能是一个函数,而是函数的指针。所以这里应该是先定义好函数,然后把指针作为参数传递给调用它的函数。
解决的问题:最常遇到的一个是事件处理函数,一个是异步请求的数据处理函数。异步请求的回调函数,相似的处理,也是将数据处理的部分单独封装,在数据返回之后调用
优点:优点前面提到了,高内聚低耦合,减少重复代码,提高可读性
缺点:回调造成一个代码的嵌套,层级多了就是回调地狱(Callback Hell)
题目二
「同步异步」
异步与同步的区别是什么,异步方法有哪些,简述其中的一种(一般会让手写promise,必须要掌握)
promise手写案例: github.com/lipeiwei-sz…
promise测试用例: github.com/promises-ap…
题目三
「微任务、宏任务与eventLoop」
简述微任务与宏任务与eventloop。那就你所知的微任务有哪些,宏任务有哪些,promise中的执行顺序可以概述下吗
I/O
setTimeout
setInterval
setImmediate
requestAnimationFrame
微任务
process.nextTick
MutationObserver
Promise.then catch finally
输出结果: 1,7,6,8,2,4,3,5,9,11,10,12
参考:www.cnblogs.com/jiasm/p/948…
题目四
「原始值与引用值」
拓展
双重循环如何优化时间复杂度,通过空间复杂度的牺牲来做
比较两者的差异,指针直接赋值,原始值依赖原型链+Object.create
题目五
「ES6 symbol考查」
原型链:developer.mozilla.org/zh-CN/docs/…
存储器: https://www.jianshu.com/p/bd00adb67ee6
题目六
「隐式转换」
[] == 0 //返回结果是 true
![] == 0 //返回结果是 true
[] == '' //返回结果是 true
!![] == '' //返回结果是 false
'' == true //返回结果是 false
不建议在开发中使用==与let,let应极力避免。而且应该在开发中避免隐式转换的使用,方便自己也方便他人的代码阅读
题目七
「this考查」
输出结果
//window,undefined
//{a: 2} 2
注意箭头函数与普通函数表达式的区别
题目八
「字符串汇总」
api参考:developer.mozilla.org/en-US/
题目九
「ES6 proxy考查」
proxy中
get方法用于拦截某个属性的读取操作,可以接受三个参数,依次为目标对象、属性名和 proxy 实例本身
apply方法拦截函数的调用、call和apply操作。apply方法可以接受三个参数,分别是目标对象、目标对象的上下文对象(this)和目标对象的参数数组
construct方法用于拦截new命令,接收三个参数。
- target:目标对象
- args:构造函数的参数对象
- newTarget:创造实例对象时,new命令作用的构造函数(下面例子的p)
题目十
「分辨率适配方案」
谈谈你知道的分辨率适配方案,工作中你用的最多的是那种,做一个landingPage如何适配13.3寸电脑、15.7寸电脑、ipad、手机(iphone11)(一般需要简单手写下方法)
我自己的话常用的ui框架是antd,里面的栅格做的很好。假如不使用框架的话,我会选择使用媒体查询
写在最后
微信500人群:群内不定期会有赞助商送书活动,BAT大厂资深大牛定期推送面经与源码分析,更有内推跳槽咨询、视频资源共享等等福利。加入我们一起进步。
为了解决微信群二维码有效期7天的问题,下方的二维码做了持久化处理
公众号:中台架构之家
知乎:安大虎
定期推送面经与源码分析、油管技术视频等......好资源要共享,关注我们一起进步