Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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编写一个非常简单的函数来计算阶乘。我知道在javascript中,您可以将函数分配给变量 所以我在一个在线编译器()上尝试了这个方法,这就是我的代码的样子 var mynum = prompt("Enter a number", "<enter a number>"); var answer; if (isNaN(mynum)){ console.log(mynum +" is not a number"); } else{ console.log("

我正在用javascript编写一个非常简单的函数来计算阶乘。我知道在javascript中,您可以将函数分配给变量

所以我在一个在线编译器()上尝试了这个方法,这就是我的代码的样子

var mynum = prompt("Enter a number", "<enter a number>");
var answer;
if (isNaN(mynum)){
 console.log(mynum +" is not a number");
}
else{
 console.log("You entered "+mynum);
 answer = function (mynum){
            var i = mynum-1;
            var temp = mynum;
            while(i>0){
              temp = temp*i;
              i--;
            }
            return temp;
  };
 console.log("the factorial of "+mynum+" is "+answer);
}
}

但是,当我创建函数并单独调用它时,我没有这个问题(类似于answer=function(mynum))

谁能告诉我为什么会这样


谢谢!

当您返回javascript中的函数时,例如
answer()
。您必须这样调用它

log(“+mynum+”的阶乘是“+answer(mynum))


您需要使用您通过调用它编写的函数,即

function add (a,b) {
  return a + b;
}

add(1,2);

将函数指定给变量与指定其求值不同

在您的情况下,您有两种可用的解决方案:

在登录时对指定的功能进行有效调用:

console.log("the factorial of "+mynum+" is "+answer(mynum));
answer = (function (mynum){
  var i = mynum-1;
  var temp = mynum;
  while(i > 0) {
    temp = temp*i;
    i--;
  }
  return temp;
}(mynum));
在分配时间对分配的职能进行有效调用:

console.log("the factorial of "+mynum+" is "+answer(mynum));
answer = (function (mynum){
  var i = mynum-1;
  var temp = mynum;
  while(i > 0) {
    temp = temp*i;
    i--;
  }
  return temp;
}(mynum));
对于您的具体情况,这两种解决方案是相当等效的

为什么?

因为这样声明一个函数:

var func = function () {
  console.log("Hello!");
};
或者像这样:

function func () {
  console.log("Hello!");
};

如前所述,必须将其作为函数调用

var mynum = prompt("Enter a number", "<enter a number>");
var answer;
if (isNaN(mynum)){
 console.log(mynum +" is not a number");
}
else{
 console.log("You entered "+mynum);
 answer = function (mynum){
            var i = mynum-1;
            var temp = mynum;
            while(i>0){
              temp = temp*i;
              i--;
            }
            return temp;
  };
 console.log("the factorial of "+mynum+" is "+answer (mynum));
}
var mynum=prompt(“输入一个数字”);
var回答;
如果(isNaN(mynum)){
log(mynum+“不是数字”);
}
否则{
console.log(“您输入了”+mynum);
答案=函数(mynum){
var i=mynum-1;
var-temp=mynum;
而(i>0){
温度=温度*i;
我--;
}
返回温度;
};
log(“+mynum+”的阶乘是“+answer(mynum));
}
或者,您可以使用IIEF(即时调用的函数表达式):

var mynum=prompt(“输入一个数字”);
var回答;
如果(isNaN(mynum)){
log(mynum+“不是数字”);
}
否则{
console.log(“您输入了”+mynum);
答案=(函数(mynum){
var i=mynum-1;
var-temp=mynum;
而(i>0){
温度=温度*i;
我--;
}
返回温度;
})(八哥);
log(“+mynum+”的阶乘是“+answer”);
}

请注意,我在您的函数周围添加了一个括号并传入了参数。这就是您可以立即调用函数的方式。

您必须调用answer并向其传递一个值,因此:
…+answer(mynum))
。考虑一下这个问题-您的函数接受一个参数
函数(mynum)
。当你用
调用它时,“+mynum+”的阶乘是“+answer”
你希望它使用什么参数?所以据我所知,像var=function(x)这样的操作不是计算function(x)将返回值赋给var,而不是使var本身成为函数?这是否意味着我执行var=function(x)或var=function(y)甚至var=function()之间没有区别?或者,您可以使用IIEF(立即调用的函数表达式)。@Steven根据我的javascript经验,如果您不使用
()
最后,它设置为一个函数本身。如果使用
()
传递它,它会将其识别为一个返回值函数,并将返回值存储在变量中。@Ninetainedo,在您添加的
(mynum)赋值时调用的函数末尾
。为什么?调用的是什么?或者说,哪里是解释这一点的好资源?正如您在代码块的第一行所看到的,函数只需要一个参数(名称不正确的
mynum
与上面的变量类似)。因此,我必须在调用函数时向其传递一个参数。这与上面的代码块上发生的情况完全相同。@AdamPatterson他添加了参数,以便函数运行并返回一个值。它被称为IIFE,您可以在此处了解它们: