JavaScript中的基本公共/私有函数结构

时间:2014-01-25 22:49:38

标签: javascript

我是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]

为什么要这样做?我该如何解决这个问题?

4 个答案:

答案 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_membermy_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