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

# 01-20

## 场景题

* 模板字符串处理
  * 如果对应的键值不存在则不处理
  * |后面跟着的是filter函数，均在filters中存在
  * 如果结果是对象则对接过进行 JSON.stringify()
  * 如果结果是函数则进行 toString()

```js
var str = `
a
{{      obj.a   | filter |             filter2        }
b
{obj.b.c}
c
{obj.c.d}
`
var obj = {
    a:function(){},
    b:{c:{e:123}},
    c:{}
}
var g = {
    filter(str) {return 'aaa' + str },
    filter2(str) {return str + 'bbb'}
}

// 实现
function parseTemplate(temp,obj,filters){
    // ...code
}
parseTemplate(str,obj,g)
```

替换后的结果为

```js
// a
// {aaafunction () { }bbb
// b
// {"e":123}
// c
// {obj.c.d}
```

## 理论

1. 什么是原型，什么是原型链
2. 剔除数组首元素的方法有哪些
3. promise的状态有哪些
4. promise有什么特点
5. 什么是回调地域
6. for in 遍历数组有哪些问题
7. 观看示例,输出结果是什么，并阐明理由
   * 例1
   ```js
   const promise = new Promise((resolve, reject) => {
       console.log(1)
       resolve()
       console.log(2)
   })
   promise.then(() => {
       console.log(3)
   })
   console.log(4)
   ```
   * 例2
   ```js
   function fn(){
       for (let i = 0; i < 4; i++) {
           setTimeout(function(){
               console.log(i)
           },1000)
       }
   }
   fn()
   ```
   * 例3
   ```js
   let a = 0
   let b = async () => {
       a = a + await 10
       console.log('2', a)
   }
   b()
   a++
   console.log('1', a)
   ```

## 朋友们的回答

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