我有以下代码,试图返回两个数字之间的范围,而内部函数没有返回值。它只返回[功能]。谁能告诉我为什么?
var range = function(num1, num2) {
var output = [];
return function range2 () {
if (num2 - num1 === 2) {
return [num1+1];
}
else if (output.length + 1 === num2 - num1) {
return output;
}
else if (output.length + 1 !== num2 - num1) {
output.push(num1 + 1);
}
return range2(num1 + 1, num2);
};
};
//更新:这是我的代码,最终正常工作,FWIW:
var range = function(num1, num2) {
var list = [];
var range2 = function(num1, num2) {
list.push(num1 + 1);
if (num2 - num1 === 2) {
return list;
}
else {
return range2(num1 + 1, num2);
}
};
return range2(num1, num2);
};
答案 0 :(得分:1)
您的退货将返回定义。如果您尝试返回函数的执行,则需要添加()
见这里:
var range = function(num1, num2) {
var output = [];
return function range2 () {
if (num2 - num1 === 2) {
return [num1+1];
}
else if (output.length + 1 === num2 - num1) {
return output;
}
else if (output.length + 1 !== num2 - num1) {
output.push(num1 + 1);
}
return range2(num1 + 1, num2);
}(); // <---- this will execute the defined function.
};
答案 1 :(得分:0)
range()
函数从不调用range2()
。它只返回函数表达式。
此外,range2()
需要参数。
var range = function(num1, num2) {
var output = [];
function range2(num1, num2) {
if (num2 - num1 === 2) {
return [num1 + 1];
} else if (output.length + 1 === num2 - num1) {
return output;
} else if (output.length + 1 !== num2 - num1) {
output.push(num1 + 1);
}
return range2(num1 + 1, num2);
};
return range2(num1, num2);
};
alert(range(1, 10));
&#13;