我是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());
我在哪里弄错了?
答案 0 :(得分:1)
如果要使用闭包,则需要从factorial()
返回:
function factorial(foo){
let num = foo;
function calculateFactorial(){
for (let i = num - 1; i >= 1; i--) {
num = num * i;
}
return num;
}
return calculateFactorial;
}
let myFunc = factorial(10);
console.log(myFunc());// Output: 3628800
让我为我展示一个更简单和说明性的例子:
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
请阅读cool answers at SO about what closure is。这些是一些亮点:
答案 1 :(得分:1)
简单来说,您不需要在calculateFactorial
函数中使用另一个函数factorial
。
function factorial(num){
for(i=num-1; i>=1; i--){
num= num*i; // num *= i
}
return num;
}
console.log( factorial(5));
答案 2 :(得分:0)
这是解决方案: (您需要在内部调用函数,还需要返回)
function factorial(num_){
var num;
if (typeof num_ === "undefined") {
num = 5;
} else {
num = num_;
}
var calculateFactorial = function(){
for(var i=num-1; i>=1; i--){
num= num*i; // num *= i
}
return num;
}
return calculateFactorial();
}
console.log(factorial(2));
答案 3 :(得分:0)
正确的方法是:
function factorial(num){
function calculateFactorial(num){
for(i=num-1; i>=1; i--){
num= num*i; // num *= i
}
return num;
}
return calculateFactorial(num);
}
console.log(factorial(5));
您要做的是首先定义一个函数析因,该函数将num作为变量,然后在其中定义另一个函数以实际计算结果。因此,使方法变得复杂了
Blockquote
Blockquote