instanceof原理
function _instanceof(target, type) {
let some = false
if(target===null)return some
some = target.__proto__ === type.prototype
if(some) {
return true
}
some = innstanceof(target.__proto__, type)
return some
}
bind的实现
Function.prototype.bind = funtion(){
const arg = Array.form(arguments)
const _this = arg.shift()
return () => {
_this.fn = this
const val = _this.fn(...args)
delete _this.fn
return val
}
}
apply和call的作用及区别
- 改变this
- 不同的只是参数, apply第二位是一个数组
- call, 第一位是this, 后面的安正常参数传入即可
v8垃圾回收机制
- v8堆的垃圾回收主要分为两个区域
- 我们姑且叫新老区域
- 新区域主要储存短期存活的数据, 和小型数据
- 老区主要储存的是 长期存活的和, 大型数据
- 新区又分为两个区域
- 一个储存区, 一个空闲区
- 回收时把, 需要存活的数据拷贝到空闲区,然后清空原来的储存区
- 因为新区是采用复制的形式来清理和整理数据, 所以新区空间通常都比较小, 存储的也只能是小型数据
- 多次回收还存活的数据会被送入老区
- 老区因为空间大, 所以完成一次回收, 需要的时间可能会比较长, 所以并不是一次性完成的收回,而是执行一段时间会释放线程, 避免造成卡顿
0.1+0.2为什么不等于0.3
- 储存转2进制无法完全转化, 超出52位的0舍弃1进位
- 所以后续运算等操作也可能存在精度丢失
- 运算结果会保留17位的四舍五入
- 0.1+0.2储存和运算都存在精度丢失导致了0.1+0.2!=0.3