JavaScript中的递归减少

trz*_*zek 2 javascript recursion reduce


我是JavaScript的新手,并不了解它的一些行为.我想编写一个在Eloquent JavaScript书中找到的递归版本的reduce函数.那是我的代码:

function rec_reduce( fn, base, list ) {
    if( list.length === 0 ) {
        return base;
    }
    else {
        rec_reduce( fn, fn( base, list[ 0 ] ), list.slice( 1 ) );
    }
}
print( rec_reduce( Math.min, 100, [ 5, 3, 7, 2, 6, 5 ] ));
Run Code Online (Sandbox Code Playgroud)

结果是:

undefined
Run Code Online (Sandbox Code Playgroud)

为了看看我发生了什么:

print( base );
Run Code Online (Sandbox Code Playgroud)

作为函数的第一行,结果是:

100
5
3
3
2
2
2
undefined
Run Code Online (Sandbox Code Playgroud)

谁能解释我为什么?

Lin*_*een 7

在那个else街区,你必须这样做

return rec_reduce( ... )
Run Code Online (Sandbox Code Playgroud)