---
url: https://sugarat.top/offer/review/01-16.md
---

# 01-16

## 模拟实现

1. 实现bind，call，apply
2. 实现new

## 理论

1. Object.prototype.toString.call 是如何判断变量的类型的，讲原理
2. JavaScript的垃圾回收机制是怎样的，简述一下
3. 什么是强引用与弱引用
4. Map与WeakMap的区别有哪些
5. null 与 undefined 有什么区别
6. 常见的内存泄露场景有哪些，如何避免

## 场景

1. 请求合并：短时间内需要请求多个资源合并成一个请求发送

```js
// 首先有一个接口其请求路径为 /path
// query有一个id参数支持传一个或者多个id
// /path?id=1
// /path?id=1,2,3
// /path?id=1,2
// 返回内容格式为（假设请求的query是 id=1,2）
const demoRes = {
    1:{
        data:{}
    },
    2:{
        data:{}
    }
}
// request的构成
request({
    url:'/path',
    query:{
        id:''
    }
})

// 下面是使用场景实现,每个方法回调最终拿到的是自己需要的内容

getArticle(3).then(res=>{})
getArticle(4).then(res=>{})
getArticle(5).then(res=>{})
getArticle(6).then(res=>{})

// 实现这个getArticle方法
```

## 朋友们的回答

* [tdk](https://www.cnblogs.com/dark-duck/p/14287610.html)
* [tl](https://juejin.cn/post/6918357103388131342)
* [fyx](https://www.cnblogs.com/banshanliang/p/14297837.html)
