JavaScript的数据类型?基本数据类型和引用数据类型有什么区别?
整理:
- 本数据类型 String, Number, Boolean, Null, Undefined, Symbol(ES6标准引入)
- 引用数据类型Object=》【Array,Function,Object,Set,WeakSet,Map】
- 区别
3.1 基本数据类型的值存储在栈中,引用类型存储在堆中。
3.2 引用数据类型在栈中存储一个地址,这个地址指向堆中存储的变量。
3.3 当对基本数据类型变量进行计算时,直接操作值,而对引用数据类型进行计算时,操作的对象是引用。
对象深拷贝?
整理:
JSON.parse(JSON.stringify())
,这种是最常用的深拷贝的方式,但是不能处理正则,日期和函数- 递归实现深拷贝,在函数内判断类型。
JavaScript中遍历对象的方式?
const keys = Object.keys().
获取所有的对象上的keys- for in 循环,
for(let o in obj ){ console.log(obj[a])}
谈谈你对闭包的理解?
整理:
闭包在JavaScript高级程序设计中给的定义是指有权访问另一个函数作用域中变量的函数
优点:
1. 实现缓存,不被垃圾回收,变量持久化。
2. 保护函数内的变量安全,不被外界所污染,变量私有化。
3. 利用闭包特性实现柯里化。
缺点:
1. 内存消耗,闭包产生的变量无法销毁,解决方法是可以在使用完变量后手动为它赋值为null,避免内存泄露。
2. 性能问题,由于闭包内部变量优先级高于外部变量,在查找上要多查一层作用域链,对速度有影响。
什么是原型和原型链?
整理:
闭包在JavaScript高级程序设计中给的定义是指有权访问另一个函数作用域中变量的函数
优点:
1. 实现缓存,不被垃圾回收,变量持久化。
2. 保护函数内的变量安全,不被外界所污染,变量私有化。
3. 利用闭包特性实现柯里化。
缺点:
1. 内存消耗,闭包产生的变量无法销毁,解决方法是可以在使用完变量后手动为它赋值为null,避免内存泄露。
2. 性能问题,由于闭包内部变量优先级高于外部变量,在查找上要多查一层作用域链,对速度有影响。
Javascript中的宏任务和微任务?
- 微任务是用于插队的
- 微任务是快于宏任务的,但是一般是由宏任务开始执行。
- 注:为什么说微任务是用于插队的呢?因为每次执行宏任务之前都会看有没有微任务,不管微任务是何时加入队列的,都会清空微任务队列之后才会执行下一个宏任务
- 微任务>dom渲染>宏任务
1)main script中的代码优先执行(编写的顶层script代码);
2)在执行任何一个宏任务之前都会先查看微任务队列中是否有任务需要执行
3)也就是宏任务执行之前,必须保证微任务队列是空的;
4) 如果不为空,那么久优先执行微任务队列中的任务(回调)
宏任务一般是:包括整体代码script,setTimeout,setInterval。
微任务:Promise,process.nextTick。