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

# 01-22

## 模拟实现

1. 实现一个简单的Promise，具备then 与 catch方法

```js
// 如有精力，考虑一下如何实现链式调用
function myPromise(executor){
    // ...你的实现
}

new myPromise((res,rej)=>{
    console.log(1)
    res('success')
}).then(console.log)

new myPromise((res,rej)=>{
    console.log(2)
    rej('error')
}).then(console.log)
.catch(err=>{
    console.log('----')
    console.log(err)
})
```

## 场景题

1. 如何实现大文件的分片上传,断点续传,还有通常说的秒传?

```js
// 阐述你的思路即可，多捋一捋，确保思路清晰
```

## 理论

1. 什么是函数柯里化？他有什么作用
2. 实现一个柯里化函数

```js
function currying(){
    // ... 你的实现
}

// ---测试代码---
function sum(a,b,c,d,e){
    console.log(a+b+c+d+e)
}
sum = currying(sum)
sum(1,2)(3)(4)(5) // 15
```

3. this指向考察，阐明输出结果是什么
   * 例1
   ```js
   var a = 1
   var obj = {
       fun:function(){
           console.log(a)
       },
       a:2
   }
   obj.fun() // ?
   ```
   * 例2
   ```js
   var a = 1
   function foo(){
       console.log(a) 
   }
   function bar(){
       var a = 2
       foo()
   }
   bar() // ?
   ```
4. 原始值类型有哪些
5. null是对象吗?为什么 typeof null === 'object'

## 事件相关

1. 事件触发的几个阶段是什么
2. 为什么通常在冒泡阶段执行事件
3. 实现一个demo
   * html结构
   ```html
   <ul id='list'>
       <li data-id>
           <!-- 很多子节点,但不包含li -->
       </li>
   </ul>
   ```
   * 要求点击li或者li中的任意子节点都能取到li上的data-id如何实现
   ```js
   // 你的实现
   ```

## 朋友们的回答

* [tl](https://juejin.cn/post/6921253665609105415)
