JS面经D1

25 阅读2分钟

1.延迟加载JS有哪些方式

延迟加载:async和defer

绿:HTML解析
灰:HTML解析暂停
紫:script脚本的下载
粉:script脚本的执行

image.png

1.1 没有加延迟加载的解析流程

HTML解析=》html解析暂停、(script脚本开始下载+script脚本执行)=》继续执行后面的html解析 image.png

image.png

1.2 async加载的解析流程(async的js执行不按顺序)

HTML解析+js脚本下载=》HTML暂停解析+js脚本执行=》HTML继续解析

image.png

1.3 defe加载的解析流程(等html全部解析完成才会执行js代码,且是顺次执行的)

html解析+js脚本下载=》js脚本执行

image.png

image.png 结果:

image.png

1.4 async和defer的区别

1.4.1 js的执行顺序上的区别

defer:等待html全部解析完,才会执行js代码,顺次执行js脚本
async:async和html解析是并行的(可看1.2图),不是顺次执行js脚本,(谁先加载完谁先执行)

2.JS数据类型有哪些

2.1 基本类型(Primitive)

值本身大小固定、不可变,JS 引擎会把值直接存在「栈」区变量槽里,复制时就是纯字节拷贝,两个变量互不干扰。
基本类型有: undefined、null、boolean、number、bigint、string、symbol

2.2 引用类型(Reference)(只要 typeof 结果是 'object' 或 'function',它就一定是引用类型

值大小不固定、可扩展、可变,引擎只在栈里留一个“门牌号”(指针),真实数据放在「堆」区。复制时只是把门牌号再抄一份,两个变量指向同一块堆内存。 引用类型有:

image.png

3.JS数据类型考题(涉及到隐式转换)

3.1 隐式转换规则

image.png

4.null和undefined的区别

js最初是这样区分的:
null是一个表示‘无’的 对象(空指针类型), 转化为数值时为0;
undefined表示一个‘无’的 数值(基本类型), 转化为数值时为NaN

4.1 null

js的null会被隐式转换为0,且null为对象格式

image.png

5.==和===的区别

image.png

5.1 ==比较的是值、 ===比较的是数值类型(===更加严谨)

image.png

image.png 验证是否被隐式转化:(重写valueOf()方法,改变其内部,验证被隐式转化了) image.png

image.png

6. JS微任务和宏任务

要执行宏任务的前提是清空了所有的微任务 流程;同步=》事件循环【包括宏任务和微任务】(微任务=》宏任务)

image.png

6.1 JavaScript是单线程语言

单线程:同一个时间只能做一件事情

image.png

6.2 JavaScript如何执行异步代码

先执行同步代码,全部同步代码执行完后,再执行事件循环(异步代码)(比如:事件、定时器、请求)

image.png

image.png

6.2.1 消息队列:先进先出的队列

6.2.2 事件循环:主线程重复从消息队列中获取消息、执行的过程

6.3 事件循环中包含:【微任务、宏任务】

image.png

7. JS作用域考题(重点!!!)

8. JS对象考题

9. JS作用域+this指向+原型 考题