2014-09-21 107 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

相關問題