Javascript-尝试将函数分配给变量
我正在用javascript编写一个非常简单的函数来计算阶乘。我知道在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("
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,您可以在此处了解它们: