用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
相关文章推荐
- js判断变量类型,类型转换,
- js数组去重的4个方法
- 你可能不知道的10个JavaScript小技巧
- JavaScript中数据类型详解
- HTML、JavaScript和CSS学习总结
- JSONP跨域的原理解析
- js以excel为模板的打印
- javascript onclick 函数不执行
- Ext.grid.GridPanel数据转json
- ExtJs4.2.1中的Ext.grid.GridPanel选择行回车事件
- js 监视 iframe 或 frameset 的内容变动
- javascript--事件
- JSONArray 将数组格式的json数据 需要的包 <dependency>
- 我的第一个jsdemo总结-从构思到编写流程和注意点
- [转] JavaScript 原型理解与创建对象应用
- CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
- servlet+jsp实现的文件上传与下载
- r.js压缩打包
- 常用js类
- js中的事件委托