Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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新手,正在尝试学习闭包。有很多示例使用if语句来查找阶乘。我试图在for循环中执行它,但结果显示为未定义 我的代码: function factorial(num){ var num = 5; function calculateFactorial(){ for(i=num-1; i>=1; i--){ num= num*i; // num *= i } return num;

我是JavaScript新手,正在尝试学习闭包。有很多示例使用
if
语句来查找阶乘。我试图在
for
循环中执行它,但结果显示为未定义

我的代码:

function factorial(num){

    var num = 5;

    function calculateFactorial(){

       for(i=num-1; i>=1; i--){
           num= num*i; // num *= i
       }
       return num;
    }
}

console.log(factorial());

我哪里弄错的

如果要使用闭包,则需要从
factorial()返回:

让我举一个更简单、更具说明性的例子:

function fooFunction(foo){ 
    let num = foo;       
    function calculateFactorial(){
        num +=1;
        return num;
    }
    return calculateFactorial;
 }

 let myFunc = fooFunction(1);
 console.log(myFunc()); // Output: 2
 console.log(myFunc()); // Output: 3
 console.log(myFunc()); // Output: 4
 console.log(myFunc()); // Output: 5
请看这个。以下是一些亮点:

  • 无论何时在另一个函数中使用函数,都会使用闭包
  • JavaScript中的闭包类似于保留所有局部变量的副本,就像函数退出时一样
  • 最好的想法可能是,闭包总是创建为函数的一个条目,并且局部变量被添加到该闭包中
  • 每次调用带有闭包的函数时,都会保留一组新的局部变量(假定函数中包含函数声明,并且返回对该内部函数的引用,或者以某种方式为其保留外部引用)

如果要使用闭包,则需要从
factorial()返回:

让我举一个更简单、更具说明性的例子:

function fooFunction(foo){ 
    let num = foo;       
    function calculateFactorial(){
        num +=1;
        return num;
    }
    return calculateFactorial;
 }

 let myFunc = fooFunction(1);
 console.log(myFunc()); // Output: 2
 console.log(myFunc()); // Output: 3
 console.log(myFunc()); // Output: 4
 console.log(myFunc()); // Output: 5
请看这个。以下是一些亮点:

  • 无论何时在另一个函数中使用函数,都会使用闭包
  • JavaScript中的闭包类似于保留所有局部变量的副本,就像函数退出时一样
  • 最好的想法可能是,闭包总是创建为函数的一个条目,并且局部变量被添加到该闭包中
  • 每次调用带有闭包的函数时,都会保留一组新的局部变量(假定函数中包含函数声明,并且返回对该内部函数的引用,或者以某种方式为其保留外部引用)
    • 以下是解决方案: (您需要调用内部函数,也需要返回)

      函数阶乘(num){
      var-num;
      如果(typeof num_==“未定义”){
      num=5;
      }否则{
      num=num;
      }
      var calculateFactorial=函数(){
      对于(变量i=num-1;i>=1;i--){
      num=num*i;//num*=i
      }
      返回num;
      }
      返回calculateFactorial();
      }
      console.log(阶乘(2))以下是解决方案:
      (您需要调用内部函数,也需要返回)

      函数阶乘(num){
      var-num;
      如果(typeof num_==“未定义”){
      num=5;
      }否则{
      num=num;
      }
      var calculateFactorial=函数(){
      对于(变量i=num-1;i>=1;i--){
      num=num*i;//num*=i
      }
      返回num;
      }
      返回calculateFactorial();
      }
      
      console.log(阶乘(2))
      简单地说,在
      factorial
      函数中不需要另一个函数
      calculateFactorial

      函数阶乘(num){
      对于(i=num-1;i>=1;i--){
      num=num*i;//num*=i
      }
      返回num;
      }
      
      console.log(阶乘(5))
      简单地说,在
      factorial
      函数中不需要另一个函数
      calculateFactorial

      函数阶乘(num){
      对于(i=num-1;i>=1;i--){
      num=num*i;//num*=i
      }
      返回num;
      }
      console.log(阶乘(5))正确的方法是:

      函数阶乘(num){
      函数计算因子(num){
      对于(i=num-1;i>=1;i--){
      num=num*i;//num*=i
      }
      返回num;
      }
      返回计算因子(num);
      }
      console.log(阶乘(5))正确的方法是:

      函数阶乘(num){
      函数计算因子(num){
      对于(i=num-1;i>=1;i--){
      num=num*i;//num*=i
      }
      返回num;
      }
      返回计算因子(num);
      }
      
      console.log(阶乘(5))
      factorial
      不返回任何内容。。。你也从不打电话给CalculateFactory,我现在才知道。谢谢
      factorial
      没有返回任何内容。。。你也从不打电话给CalculateFactory,我现在才知道。谢谢在阶乘中没有使用calculateFactorial函数,right@Durga谢谢你的关注。我已经编辑了我的答案。在阶乘中没有使用calculateFactorial函数,right@Durga谢谢你的关注。我已经编辑了我的答案。这不是一个合适的解决方案,因为您正在传递2并将num的值更改为5I,我只是从Q复制代码。我不想现在就编写库…这不是一个合适的解决方案,因为您正在传递2并将num的值更改为5I,我只是从Q复制代码。我现在不想写图书馆。。。