温馨提示:距离2024年结束还剩18天,剩余约为4.92%...

转载

前端最新JavaScript 高级进阶面试题(30题&附答案)(上)

1. 说说ECMAScript6 怎么写 class?

  • 这个语法糖可以让有 OOP 基础的人更快上手 js ,至少是一个官方的实现了。
  • 对熟悉 js 的人来说,这个东西没啥大影响;一个 Object.creat() 搞定继承,比 class 简洁清晰的多。

2.说说什么是面向对象编程及面向过程编程,它们的异同和优缺点?

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
  • 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
  • 面向对象是以功能来划分问题,而不是步骤。

3.说说异步编程的实现方式?

  • 回调函数:
    • 优点:简单、容易理解
    • 缺点:不利于维护,代码耦合高
  • 事件监听(采用时间驱动模式,取决于某个事件是否发生):
    • 优点:容易理解,可以绑定多个事件,每个事件可以指定多个回调函数。
    • 缺点:事件驱动型,流程不够清晰
    • 发布/订阅(观察者模式)
    • 类似于事件监听,但是可以通过‘消息中心’,了解现在有多少发布者,多少订阅者
  • Promise 对象:
    • 优点:可以利用 then 方法,进行链式写法;可以书写错误时的回调函数
    • 缺点:编写和理解,相对比较难
  • Generator 函数:
    • 优点:函数体内外的数据交换、错误处理机制
    • 缺点:流程管理不方便
  • async 函数:
    • 优点:内置执行器、更好的语义、更广的适用性、返回的是 Promise、结构清晰。
    • 缺点:错误处理机制

4. 说说面向对象编程思想?

基本思想是使用对象,类,继承,封装等基本概念来进行程序设计

  • 优点:
    • 易维护
    • 易扩展
    • 开发工作的重用性、继承性高,降低重复工作量。
    • 缩短了开发周期

5. 说说Gulp 是什么?

  • gulp 是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成。
  • Gulp 的核心概念:流
  • 流:就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。
  • gulp 正是通过流和代码优于配置的策略来尽量简化任务编写的工作。

6.想实现一个对页面某个节点的拖曳?如何做?

  • 给需要拖拽的节点绑定 mousedown , mousemove , mouseup 事件。
  • mousedown 事件触发后,开始拖拽。
  • mousemove 时,需要通过 event.clientX 和 clientY 获取拖拽位置,并实时更新位置。
  • mouseup 时,拖拽结束。
  • 需要注意浏览器边界的情况。

7.封装一个函数,参数是定时器的时间,then 执行回调函数 执行回调函数?

function sleep(time) {
    return new Promise((resolve) => setTimeout(resolve, time));
}

8. 怎么判断两个对象相等?

obj = { a: 1, b: 2 }
obj2 = { a: 1, b: 2 }
obj3 = { a: 1, b: '2' }
JSON.stringify(obj) == JSON.stringify(obj2);//true
JSON.stringify(obj) == JSON.stringify(obj3);//false

9. Javascript全局函数和全局变量?

  • 全局变量:
    • Infinity 变量代表正的无穷大的数值
    • NaN 指示某个值是不是数字值
    • undefined 指示未定义的值
  • 全局函数:
    • decodeURI() 解码某个编码的 URI 。
    • decodeURIComponent() 解码一个编码的 URI 组件。
    • encodeURI() 把字符串编码为 URI。
    • encodeURIComponent() 把字符串编码为 URI 组件。
    • escape() 对字符串进行编码。
    • eval() 计算 JavaScript 字符串,并把它作为脚本代码来执行。
    • isFinite() 检查某个值是否为有穷大的数。
    • isNaN() 检查某个值是否是数字。
    • Number() 把对象的值转换为数字。
    • parseFloat() 解析一个字符串并返回一个浮点数。
    • parseInt() 解析一个字符串并返回一个整数。
    • String() 把对象的值转换为字符串。
    • unescape() 对由 escape() 编码的字符串进行解码。

10. 项目性能优化有哪些?

  • 减少 HTTP 请求数
  • 减少 DNS 查询
  • 使用 CDN
  • 避免重定向
  • 图片懒加载
  • 减少 DOM 元素数量
  • 减少 DOM 操作
  • 使用外部 JavaScript 和 CSS
  • 压缩 JavaScript 、 CSS 、字体、图片等
  • 优化 CSS Sprite
  • 使用 iconfont
  • 字体裁剪
  • 多域名分发划分内容到不同域名
  • 尽量减少 iframe 使用
  • 避免图片 src 为空
  • 把样式表放在 link 中
  • 把 JavaScript 放在页面底部
  • 作者:CZC(关于作者)
  • 发表时间:2024-09-20 20:12
  • 版权声明
  • 评论区:

    留言