console
// Array.prototype.reduce1 = function (fn, initValue) {
// let arr = this
// let res = initValue || arr[0]
// for (let i = initValue ? 0 : 1; i < arr.length; i++) {
// res = fn(res, arr[i], i, arr)
// }
// return res
// }
// const a = [].reduce1((pre, cur) => pre + cur, 2)
// console.log(a)
// const arr = [[1,23,4], [[2], 3], 4]
// const arrDfs = list => {
// return list.reduce((res, cur) => {
// let curRes = Array.isArray(cur) ? arrDfs(cur) : [cur]
// return [...res, ...curRes]
// // }, [])
// // }
// // const result = arrDfs(arr)
// // console.log('res', result)
// class Mypromise {
// constructor(fn) {
// this.state = 'pending'
// this.successCb = []
// this.failCb = []
// fn(this.resolve, this.reject)
// }
// resolve = value => {
// if (this.state !== 'pending') {
// return
// }
// this.state = 'success'
// setTimeout(() => {
// this.successCb.forEach(fn => fn(value))
// })
// }
// reject = value => {
// if (this.state !== 'pending') {
// return
// }
// this.state = 'fail'
// setTimeout(() => {
// this.failCb.forEach(fn => fn(value))
// })
// }
// then(resolveCb, rejectCb) {
// return new Mypromise((resolve, reject) => {
// this.successCb.push((value) => {
// let res = resolveCb(value)
// res instanceof Mypromise ? res.then(resolve, reject) : resolve(res)
// })
// this.failCb.push((value) => {
// let res = rejectCb(value)
// res instanceof Mypromise ? res.then(resolve, reject) : reject(res)
// })
// })
// }
// }
// const promiseTest = new Mypromise((resolve, reject) => {
// console.log('promisestart1')
// setTimeout(() => {
// resolve('testResolve')
// }, 2000)
// console.log('promisestart2')
// })
// promiseTest.then((res) => {
// console.log('testthen', res)
// })