Javascript 传递到函数中的变量如何在该函数中未定义?

Javascript 传递到函数中的变量如何在该函数中未定义?,javascript,Javascript,函数“subset”告诉我“max”是未定义的 发生了什么事 function ArrayAdditionI(arr) { arr.sort(); var largest = arr.pop() console.log(largest); subset([], arr, largest); } function subset(soFar, rest, largest) { var sum = 0; if (rest.length === 0)

函数“subset”告诉我“max”是未定义的

发生了什么事

function ArrayAdditionI(arr)
{
    arr.sort();
    var largest = arr.pop()
    console.log(largest);
    subset([], arr, largest);
}


function subset(soFar, rest, largest)
{
    var sum = 0;
    if (rest.length === 0)
    {
        for(var i=0; i<soFar.length; i++)
        {
            sum+= soFar[i];            
        }
        console.log("sum = "+ sum + " " + largest);
        if (sum === largest) return true;
    }

    else
    {
        var soFar2 = soFar.slice(0);
        soFar2.push(rest[0]);
        subset(soFar,rest.slice(1));
        subset(soFar2, rest.slice(1));
    }
}


ArrayAdditionI([85,3,88,2])
函数数组添加(arr)
{
arr.sort();
变量最大=arr.pop()
控制台日志(最大);
子集([],arr,最大);
}
功能子集(soFar、rest、最大)
{
var总和=0;
如果(rest.length==0)
{

对于(var i=0;i您没有在递归函数调用中传递第三个参数,
最大值

最后对子集的递归调用没有传递第三个参数,因此它被赋予了默认值
未定义

subset(soFar,rest.slice(1));
在这里,您只传递了2个参数,但函数预期为3个。在Javascript中,这不是一个错误,其余参数的值为
undefined
。您可能希望这些行为:

subset(soFar,rest.slice(1), largest);
subset(soFar2, rest.slice(1), largest);

或者更确切地说,值
未定义
。那么第4行会做什么?@dwilbank请看下一个答案。代码在那里是100%。我现在想,我在第4行中传递了正确的变量,然后该变量被清除,并通过递归调用函数“未定义”。明白了。我认为递归调用会留下“最大的”一个人而不是把它擦干净。谢谢!