Javascript 传递到函数中的变量如何在该函数中未定义?
函数“subset”告诉我“max”是未定义的 发生了什么事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)
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行中传递了正确的变量,然后该变量被清除,并通过递归调用函数“未定义”。明白了。我认为递归调用会留下“最大的”一个人而不是把它擦干净。谢谢!