您的位置:首页 > Web前端 > JavaScript

用JS写递归中容易出错的点

2016-03-21 15:56 288 查看
看到了《javascript高级程序设计》的第七章递归部分,于是就整理一下理清头绪不太会用这里的编辑器代码排版乱七八糟的……一些递归中容易出错的点和发生的错误1.通过函数名字调用自身,当这个函数被赋给别的变量,然后这个函数变为null或其他非函数值时比如说
function factorial(num){
if (num<=1) {          return 1;     }
else{          return num*factorial(num-1);     }
}
这里通过函数名字factorial调用自身如果用
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4));//出错啦!{{{(>_< )}}}
因为 factorial已经不是一个函数了,但用anotherFactorial的时候还是会执行 return num*factorial(num-1); 就会导致错误所以可以使用arguments.callee来解决我们来复习一下arguments.calleearguments是一个类数组对象,包含着传入函数中的所有参数。主要作用是保存函数参数。它有一个叫callee的属性,是一个指针,指向拥有这个arguments对象的函数。所以即使这个递归函数换了别的名字都可以完成调用啦(Θ )2.然而在严格模式下,不能通过脚本访问arguments.callee,会导致错误。所以可以使用命名函数表达式来完成。
var factorial = (function f(num) {
if (num<=1) {          return 1;     }
else{          return num*f(num-1);     }
}
);
f()是内部函数所以即使在外部令 f= null; 也仍然是可以正常运行。
本文出自 “写代码的郭德纲” 博客,请务必保留此出处http://atuzi.blog.51cto.com/7743360/1753492
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: