【前端面试】JavaScript相关

事件循环

见:浏览器架构和事件循环

this相关

见:this指向

原型和原型链

见:JS原型和原型链

JS二进制相关

见:JS二进制:File、Blob、FileReader、ArrayBuffer、Base64

执行上下文、作用域链

见:JavaScript执行上下文

JS相关API

见:JS相关API

其他

let、const的区别

  • 块级作用域
  • 重复声明变量会报错
  • 不能在声明前访问

Promise相关

  • 解决回调地狱的问题
  • 异常穿透
  • Promise.all
  • Promise.allSettled
  • Promise.race
  • Promise.any

什么是 Iterable 对象,与 Array 有什么区别

Iterable包含一个名为 [Symbol.iterator] 的方法,该方法返回一个迭代器(Iterator)对象。例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const myIterable = {
data: ['a', 'b', 'c'],
[Symbol.iterator]() {
let index = 0;
return {
next: () => {
if (index < this.data.length) {
return { value: this.data[index++], done: false };
}
return { value: undefined, done: true };
}
};
}
};

异步加载 JS 脚本时,async 与 defer 有何区别

image-20211025190555184

  • 普通script标签:下载和执行都会阻塞Dom渲染
  • defer:立即进行异步下载,等到HTML完全解析完后开始执行,有多个defer的标签时,会按照顺序下载执行
  • async:立即进行异步下载,下载完后会立即执行同时阻塞Dom渲染,因为是下载完立即执行,不能保证多个加载时的先后顺序。