JavaScript消除与函数名紧密耦合的递归实现方法
2011-08-11 00:23
716 查看
先来看一个计算阶乘的函数:
我们来看看下面的代码:
function factorial(num) { if(num <= 1) { return 1; } else { return num * factorial(num-1); } } alert(factorial(5)); //输出120我们再看:
function factorial(num) { if(num <= 1) { return 1; } else { return num * factorial(num-1); } } alert(factorial(5)); //输出120那有没有办法避免因函数不慎被重写,而导致原先的递归函数失效了呢?
factorial = function(){
return 0;
}
alert(factorial(5)); //输出0;原因是return num * factorial(num-1);中调用的factorial函数被覆盖了
我们来看看下面的代码:
function factorial(num) { if(num <= 1) { return 1; } else { return num * arguments.callee(num-1); } } alert(factorial(5)); //输出120 var trueFactorial = factorial; //赋值函数指针 factorial = function(){ return 0; } alert(factorial(5)); //输出0;原因是return num * factorial(num-1);中调用的factorial函数被覆盖了 alert(trueFactorial(5)); //输出120alert(trueFactorial(5));仍然能输出120的原因在于return num * arguments.callee(num-1);这里用到了arguments对象的callee属性,该属性是一个指针,指向拥有这个arguments对象的函数,所以它调用到了函数本身,实现了正常的递归。
相关文章推荐
- JavaScript消除与函数名紧密耦合的递归实现方法
- JavaScript实现同时调用多个函数的方法
- Javascript中实现trim()函数的两种方法
- javascript实现函数的默认參数值方法
- JavaScript使用setInterval()函数实现简单轮询操作的方法
- JavaScript实现为事件句柄绑定监听函数的方法分析
- javascript iframe内的函数调用实现方法
- 3.1题目: 利用递归方法实现一个函数,该函数能够实现n的阶乘,即 n! = n*(n-1)*…*3*2*1;
- javascript另类方法高效实现htmlencode()与htmldecode()函数
- 在javascript中实现函数数组的方法
- javascript用函数实现对象的方法
- JavaScript实现显示函数调用堆栈的方法
- Javascript中实现trim()函数的两种方法
- [转] javascript另类方法高效实现htmlencode()与htmldecode()函数
- javascript中使用replaceAll()函数实现字符替换的方法
- javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
- javascript另类方法实现htmlencode()与htmldecode()函数实例分析
- 在javascript中实现函数数组的方法
- javascript另类方法高效实现htmlencode()与htmldecode()函数
- javascript中使用replaceAll()函数实现字符替换的方法