我在前文《The practice of anonymous recursion function in JavaScript,》寫完之後,又到 Google 找尋是否有其它解法,結果讓我找到用 callee 的作法。這作法更簡單。
我在前文《The practice of anonymous recursion function in JavaScript,》寫完之後,又到 Google 找尋是否有其它解法,結果讓我找到用 callee 的作法。這作法更簡單。
根據 ECMA-262 規範內容, callee 是 Arguments object 的屬性,不是 Function object 的屬性。難怪我在 Function object 的章節 (ch.15.3) 中找不到相關說明。關於 callee 的說明所佔篇幅不多,只有兩行:
A property is created with name callee and property attributes {DontEnum}. This initial value of this property is the Function object being executed. This allows anonymous functions to be recursive. ECMA-262 Ch.10.1.8 Arguments Object
好吧,寫程式前不先找 Google 拜碼頭,結果就是多繞一段路。規範中明言 (雖然只有兩行) , callee 指涉對象就是函數自身,因此用不著 this 了。我們只要將函數的 arguments.callee 屬性做為運算元參與 operator( ) 運算即可。整個匿名遞迴函數改寫如下: