实现reduce办法

Array.prototype._reduce = function (fn, initial) {    // 是否有初始值 留神这里初始值传undefined或者null都为没有初始值 然而空代表有值    let hasInitial = initial != undefined    // 如果有初始值循环从0开始 否则为1    let index = hasInitial ? 0 : 1    let acc = this[0]    let cur    // 如果有初始值 则间接赋值给acc    if (hasInitial) {        acc = initial    }    // 循环一次执行回调函数 传入三个参数:每次执行的累计值 以后所遍历的项 以后遍历的index    for (var i = index; i < this.length; i++) {        cur = this[i]        // 这里要把返回值赋值给acc        acc = fn(acc, cur, i)    }    return acc}

 reduceRight办法

Array.prototype._reduceRight = function (fn, initial) {    let hasInitial = initial != undefined    let index = hasInitial ? 0 : 1    let start = this.length - 1    // 不过这里默认是从右开始    let acc = this[start]    let cur    if (hasInitial) {        acc = initial    }    // 循环也是从左边开始 如果有初始值从倒数第二个开始    for (var i = this.length - 1 - index; i >= 0; i--) {        cur = this[i]        acc = fn(acc, cur, i)    }    return acc}