2023年5月web前端高频面试篇

585 阅读3分钟

以下题目是我近期面试时遇到的高频题,给大家分享一下,限于表达能力和组织能力不太好,解答也没写那么全,仅记录了关键词,望理解

  1. 什么是闭包?闭包有什么作用和副作用?

    函数内部套函数,内部函数可以获取外部函数的变量

    封装

    闭包中内存不会自动释放

  2. 闭包有副作用,那如何手动给闭包所占用的内存垃圾回收呢

    将函数置为null

  3. 看你简历上,有写到熟悉源码,可以说一说vue中哪些地方用到了闭包吗?

    computed、watch、defineReactive等

  4. 怎么设计一款mvvm框架?有什么思路

    可以理解为解决视图和数据双向绑定

  5. 谈一谈你对原型和原型链的理解

  6. promise有几种状态,以及它的常用方法

  7. promise

    • promise.then

    • promise.catch

    • promise.finally

    • promise.race

    • promise.all

  8. 如何实现promise.race?

  9. async和await与promise有什么关系和区别

  10. 双向通信方式有哪些?

    • 前端主动轮询
    • SSE
    • Websocket
  11. 什么是事件循环?讲一讲浏览器端事件循环执行顺序

    同步->异步中微任务->异步中宏任务

  12. setTimeout是准时延迟执行吗?

    不是,只是按时将方法推到了异步队列中,如果前面还有任务没执行完,需要等待前面的同步任务以及微任务执行完毕

  13. js为什么使用单线程?说说你的理解

    因为单线程适用于浏览器,无需考虑资源抢占的问题

  14. 如何在js中使用多线程?

    开启webworker,一个主线程以及多个子线程相互通信,虽然说是多线程,但是主线程仍然是保持单一

  15. 看你项目中用到了nest,请讲一讲nest编程方式和平常vue开发有什么区别呢?

    nest采用aop编程,大多数是使用装饰器,vue编程时采用的面向过程是hooks开发

  16. 如何实现一个装饰器?

    大概和闭包以及继承相关

  17. 除了Element Ui上有的那些组件,还封装过其他非业务组件吗?

    懒加载图片,可拖动的菜单框

  18. 如何二次封装el-table,怎么保证原有功能的情况下增加新功能

    slot listener attrs

  19. webpack了解过吗?webpack如何去除无用的代码?

    webpack3中用到了UglifyJS

    webpack4和webpack5中用到了terser

    uglifyJs借助于ES6静态编译的特点,在编译期间将js代码转为AST树,然后将无用的代码、死代码以及

  20. vue2中向响应式对象中添加新属性时页面没有更新,该如何处理?

    使用$set

    不推荐,使用调用响应式对象中的方法,notify

  21. 了解微前端吗?

​ 无界、乾坤 使用了webcomponents

  1. 谈谈你熟悉的设计模式?

​ 我回答了观察者模式、单例模式、工厂模式