2014-09-21 26 views
2

为了比较的目的,我正在编写某个递归函数的几个类似版本。我的功能是这样的:有没有办法引用当前函数?

function rec1(n) { 
    /* some code */ 

    rec1(n-1); 
} 

然后,创建另一个版本,我复制粘贴&并获得:

function rec2(n) { 
    /* some other code */ 

    rec2(n-1); 
} 

而不必改变函数的名称在每个版本中,我想知道是否有某种方法可以引用“当前函数”(就像在Unix脚本中,可以用$ 0变量引用“当前脚本”),以便我可以编写:

function rec1(n) { 
    /* some code */ 

    $this_function$(n-1); 
} 
+1

'arguments.callee',虽然它在严格模式下被禁止。为什么不使用名称?或者,如果递归调用始终处于最后并且始终具有相同的条件,则可能会更好地创建函数工厂。 – 2014-09-21 16:41:16

回答

6

您可以使用arguments.callee,但不推荐使用。

更好的只是name the functions,并给予他们相同的名字:

var rec1 = function rec(n) { 
    /* some code */ 

    rec(n-1); 
}; 
var rec2 = function rec(n) { 
    /* some other code */ 

    rec(n-1); 
}; 

...其中rec的范围限定在当前功能,并指出当前功能。

+2

也是FWIW,[这里是一个解释](http://stackoverflow.com/a/235760)为什么'arguments.callee'已被弃用。 – mscdex 2014-09-21 17:12:28

+0

伟大的解决方案,谢谢! – 2014-09-21 17:45:17

相关问题