Javascript 显示为未定义的数字的阶乘
我是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;
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复制代码。我现在不想写图书馆。。。