持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
一。D什么是宏任务和微任务
在异步模式下,创建异步任务主要分为宏任务与微任务两种。
宏任务是由宿主(浏览器、Node)发起的,而微任务由 JS 自身发起。
宏任务与微任务的几种创建方式:
宏任务(Macrotask):setTimeout,setInterval
微任务(Microtask):Promise,事件队列 process.nextTick
1.主线程上宏任务、微任务执行顺序
执行顺序:主线程 >> 主线程上创建的微任务 >> 主线程 >> 微任务的回调 >> 主线程上创建的宏任务
2.宏任务中包含微任务
执行顺序:主线程 >> 主线程上的宏任务队列1 >> 宏任务队列1中创建的微任务 >> 主线程上的宏任务队列2 >> 宏任务队列1中创建的宏任务
3.微任务中包含宏任务
执行顺序:主线程 >> 主线程上创建的微任务 >> 主线程上创建的宏任务 >> 微任务中创建的宏任务 >> 宏任务中创建的宏任务
二。说说JavaScript中的数据类型?存储上的差别?
基本类型:
- number 数字型
- string 字符串型
- boolean 布尔型
- undefined 未定义
- null 空
- symbol 唯一类型 (ES6新推出的类型)
- BigInt 长整型(ES7新推出的类型)
引用类型:
- Object
- Array
- Function
两种类型的区别是:存储位置不同,基本类型存储在栈中;引用类型存储在堆中,在栈中存储的是堆的地址。
三。== 和 ===区别,分别在什么情况使用
== 是等于操作符:
比较的是两个数据的值是否相等,如果比较的两个数据类型不同,会帮你做自动类型转换。
=== 是全等操作符:
比较的两个数据的值和类型必须完全相等。
四。深拷贝浅拷贝的区别?如何实现一个深拷贝?
浅拷贝:拷贝一层,深层次的引用类型则共享内存地址。
深拷贝:拷贝所有层,深层次的引用类型都具有自己独立的堆空间。
- _.cloneDeep lodash.js的一个方法
- jQuery.extend() jQuery的一个方法
- JSON.stringify()
- 手写循环递归