递归函数就是在一个函数通过名字调用自身情况下构成的。
function sum(n){
if(n<=
1){
return 1;
}
else{
return n+
sum(n-
1);
}
}
sum(
5);
这是一个经典的递归阶乘函数,但下面的代码却导致错误
function
sum(n){
if(n
<=1){
return 1;
}
else{
return n
+sum(n
-1);
}
}
var anSum
= sum;
sum = null;
anSum(
5);
可以使用arguments.callee来实现递归,是一个指向正在执行的函数指针。
function sum(n){
if(n<=1){
return 1;
}else{
return n+arguments.callee(n-1);
}
}
var anSum = sum;
sum = null;
anSum(5);//结果 15
但在严格模式下会报错,可以使用命名函数表达式来达成想要的效果
var sum =function s(n){
if(n<=1){
return 1;
}else{
return n+s(n-1);
}
}
var anSum = sum;
sum = null;
anSum(5);//结果 15
这种形式下,无论严格模式还是非严格模式都可以实行。
转载请注明原文地址: https://ju.6miu.com/read-19207.html