我是JavaScript的新手。我想使用两个函数实现递归:一个是public,另一个是私有。
在Java中,我总是像这样实现递归
public int sumOfPrevious(int n){
return addNumbers(n);
}
private int addNumbers(int n){
if (n == 1)
return 1;
else
return n + addNumbers(n-1);
}
然后调用 System.out.println(sumOfPrevious(5))返回15
但是你如何在JavaScript中实现类似的东西?
我试过了:
function sumOfPrevious(n){
return function privateFunc(n){
if (n == 1)
return 1;
else
return n + privateFunc(n - 1);
};
}
但是调用 console.log(sumOfPrevious(5))只是给了我 [Function:privateFunc]
为什么要这样做?我该如何解决这个问题?
答案 0 :(得分:3)
您需要声明嵌套函数然后使用它,而不是返回嵌套函数。
function sumOfPrevious(n){
function privateFunc(n){
if (n == 1)
return 1;
else
return n + privateFunc(n - 1);
}
return privateFunc(n);
}
答案 1 :(得分:2)
您正在返回已定义的函数。
只需执行它:
function sumOfPrevious(n){
return (function privateFunc(n){
if (n == 1)
return 1;
else
return n + privateFunc(n - 1);
})(n);
}
jsfiddle的一个工作示例here。
希望它有所帮助。
答案 2 :(得分:1)
您返回一个函数,以便获得一个函数...
要定义私有函数,您必须像在Java中一样创建一个类,然后在
中创建魔法function MyClass() {
var idx = this;
var my_private_member = 5;
this.my_public_member = 0;
function my_private_function() {
idx.my_public_member = my_private_member; //keyword "this" here won't reference to MyClass, but to the private function, so we keep a reference of MyClass to be accessed by the private function
}
this.my_public_function = function() {
my_private_function();
}
}
var my_instance = new MyClass();
无法访问 my_private_member
和my_private_function
答案 3 :(得分:0)
只需使用函数进行递归:
JAVA和Javascript是两个完全不同的东西。
function sumOfPrevious(n){
if (n == 1)
return 1;
else
return n + sumOfPrevious(n - 1);
}
// call the function
console.log(sumOfPrevious(10)); // 55