Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的基本公共/私有函数结构_Javascript - Fatal编程技术网

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

JavaScript中的基本公共/私有函数结构,javascript,Javascript,我是JavaScript新手。我想使用两个函数实现递归:一个公共函数,另一个私有函数 在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

我是JavaScript新手。我想使用两个函数实现递归:一个公共函数,另一个私有函数

在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))只会给我[函数:privateFunc]


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

您需要声明嵌套函数,然后使用它,而不是返回嵌套函数

function sumOfPrevious(n){
  function privateFunc(n){
    if (n == 1)
      return 1;
    else
      return n + privateFunc(n - 1);
  }
  return privateFunc(n);
}

您需要声明嵌套函数,然后使用它,而不是返回嵌套函数

function sumOfPrevious(n){
  function privateFunc(n){
    if (n == 1)
      return 1;
    else
      return n + privateFunc(n - 1);
  }
  return privateFunc(n);
}

只需使用函数进行递归:

JAVA和Javascript是两个完全不同的东西

function sumOfPrevious(n){
  if (n == 1)
    return 1;
  else
    return n + sumOfPrevious(n - 1);
}

// call the function
console.log(sumOfPrevious(10)); // 55

只需使用函数进行递归:

JAVA和Javascript是两个完全不同的东西

function sumOfPrevious(n){
  if (n == 1)
    return 1;
  else
    return n + sumOfPrevious(n - 1);
}

// call the function
console.log(sumOfPrevious(10)); // 55

您将返回定义的函数本身

只需执行它:

function sumOfPrevious(n){
 return (function privateFunc(n){
  if (n == 1)
    return 1;
  else
    return n + privateFunc(n - 1);
  })(n);
}
jsfiddle上的一个工作示例


希望有帮助。

您正在返回定义的函数本身

只需执行它:

function sumOfPrevious(n){
 return (function privateFunc(n){
  if (n == 1)
    return 1;
  else
    return n + privateFunc(n - 1);
  })(n);
}
jsfiddle上的一个工作示例


希望有帮助。

您返回一个函数,这样您就可以得到一个函数

要定义私有函数,您必须像在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_成员
my_private_函数
无法访问

您返回一个函数,因此获得一个函数

要定义私有函数,您必须像在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_成员
my_private_函数
无法访问

您需要调用函数工作示例您需要调用函数工作示例