js每日一问(1)

61 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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()
  • 手写循环递归