Reputation: 13
I have the following code, trying to return the range between two numbers, and the inner function is not returning a value. It simply returns [Function]. Can anyone tell me why?
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);
};
};
//UPDATE: This is my code that ended up working, 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);
};
Upvotes: 0
Views: 61
Reputation: 780798
The range()
function never calls range2()
. It simply returns the function expression.
Also, range2()
needs to take arguments.
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));
Upvotes: 0
Reputation: 10682
Your return will return the definition. If you are trying to return the execution of the function you will need to add a ()
See here:
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.
};
Upvotes: 1