这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了 JavaScript 递归操作, 由一个阶乘问题开始分析了递归操作的原理、实现方法与相关注意事项, 需要的朋友可以参考下
本文实例分析了 JavaScript 递归操作。分享给大家供大家参考,具体如下:
问题
一个简单的递归,求 n 的阶乘:
- function factorial(n){
- if (n<=1)
- {
- return 1;
- }else{
- return factorial(n-1)*n;
- }
- }
如果像下面这样使用它,则会出错:
- var fcopy = factorial;
- factorial = null;
- alert(fcopy(3));
因为 fcopy 指向的函数实体调用了 factorial,而 factorial 已经被释放。
解决的办法
使用 arguments.callee
执行流进入函数时会创建函数的运行环境(作用域链等),包括 arguments 这个特殊对象,arguments 对象有个属性指向函数本身:arguments.callee 。
- function factorial(n){
- if (n<=1)
- {
- return 1;
- }else{
- return arguments.callee(n-1)*n;
- }
- }
不过 callee 在严格模式下不可用。
使用函数表达式
- var factorial = (function f(n){
- if (n<=1)
- {
- return 1;
- }else{
- return f(n-1)*n;
- }
- })
这并非使用了什么新的技术,只是在原来概念上的一种应用,在定义 factorial 时,直接创建一个函数,再将此函数的引用赋值给 factorial。
希望本文所述对大家 JavaScript 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0515/330766.html