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 放在页面底部