前端面试题(基础篇九)

一、map与forEach的区别

forEach ⽅法,是最基本的⽅法,就是遍历与循环,默认有3个传参:分别是遍历的数组 内容 item 、数组索引 index 、和当前遍历数组 Array

map ⽅法,基本⽤法与 forEach ⼀致,但是不同的,它会返回⼀个新的数组,所以在 callback需要有 return 值,如果没有,会返回 undefined

二、箭头函数与普通函数的区别?

函数体内的 this 对象,就是定义时所在的对象,⽽不是使⽤时所在的对象

不可以当作构造函数,也就是说,不可以使⽤ new 命令,否则会抛出⼀个错误

不可以使⽤ arguments 对象,该对象在函数体内不存在。如果要⽤,可以⽤ Rest 参数 代替

不可以使⽤ yield 命令,因此箭头函数不能⽤作 Generator 函数

三、异步编程的实现⽅式

回调函数

优点:简单、容易理解
缺点:不利于维护,代码耦合⾼

事件监听(采⽤时间驱动模式,取决于某个事件是否发⽣):

优点:容易理解,可以绑定多个事件,每个事件可以指定多个回调函数
缺点:事件驱动型,流程不够清晰

发布/订阅(观察者模式)

类似于事件监听,但是可以通过‘消息中⼼ʼ,了解现在有多少发布者,多少订阅者

Promise对象

优点:可以利⽤then⽅法,进⾏链式写法;可以书写错误时的回调函数;
缺点:编写和理解,相对⽐较难

Generator函数

优点:函数体内外的数据交换、错误处理机制
缺点:流程管理不⽅便

async函数

优点:内置执⾏器、更好的语义、更⼴的适⽤性、返回的是Promise、结构清晰。
缺点:错误处理机制

四、说⼀下Vue的双向绑定数据的原理

vue.js 则是采⽤数据劫持结合发布者-订阅者模式的⽅式,通过

Object.defineProperty() 来劫持各个属性的 setter getter ,在数据变动时发布 消息给订阅者,触发相应的监听回调

五、浏览器缓存

浏览器缓存分为强缓存和协商缓存。当客户端请求某个资源时,获取缓存的流 程如下

先根据这个资源的⼀些 http header 判断它是否命中强缓存,如果命中,则直接从本地
获取缓存资源,不会发请求到服务器;
当强缓存没有命中时,客户端会发送请求到服务器,服务器通过另⼀些 request header
验证这个资源是否命中协商缓存,称为 http 再验证,如果命中,服务器将请求返回,但
不返回资源,⽽是告诉客户端直接从缓存中获取,客户端收到返回后就会从缓存中获取资
源;
强缓存和协商缓存共同之处在于,如果命中缓存,服务器都不会返回资源; 区别是,强缓
存不对发送请求到服务器,但协商缓存会。
当协商缓存也没命中时,服务器就会将资源发送回客户端。
ctrl+f5 强制刷新⽹⻚时,直接从服务器加载,跳过强缓存和协商缓存;
f5 刷新⽹⻚时,跳过强缓存,但是会检查协商缓存

强缓存

Expires (该字段是 http1.0 时的规范,值为⼀个绝对时间的 GMT 格式的时间字符
串,代表缓存资源的过期时间)
Cache-Control:max-age (该字段是 http1.1 的规范,强缓存利⽤其 max-age 值来
判断缓存资源的最⼤⽣命周期,它的值单位为秒)

协商缓存

Last-Modified (值为资源最后更新时间,随服务器response返回)

If-Modified-Since (通过⽐较两个时间来判断资源在两次请求期间是否有过修改,如

果没有修改,则命中协商缓存)
ETag (表示资源内容的唯⼀标识,随服务器 response 返回)
If-None-Match (服务器通过⽐较请求头部的 If-None-Match 与当前资源的 ETag
否⼀致来判断资源是否在两次请求之间有过修改,如果没有修改,则命中协商缓存)

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值