2013-07-10 15 views
2

我有下面的代碼行中:訪問一個函數調用是分組運營商

(function f() {}); 

有沒有我們可以分組之外的編號爲F()的方法嗎?

+1

問題是什麼令人興奮的?你能提供更多的上下文嗎? –

+0

如果你想能夠訪問它,爲什麼不以另一種方式定義它?像'(window.f = function(){})' – Adam

回答

1

Esailija的回答是創新的,但它忽略了一點。例如,如果你使用的函數表達式,然後使用.prototype.constructor如下是沒有意義的:

window.addEventListener("DOMContentLoaded", (function f() {}), false); 

在這種情況下,我更喜歡做的函數表達式一個函數聲明,而不是與功能名稱替換表達:

window.addEventListener("DOMContentLoaded", (f), false); 

function f() {} 

上述程序完全有效。您可以在函數聲明出現在程序中之前調用它。現在您可以參考f「分組以外」。這有點像作弊,但這又是人們通常這樣做的方式(減去不必要的括號)。

+0

出於好奇,爲什麼在AEL調用中圍繞f的parens? – dandavis

+1

沒有意義的時候,我怎麼能錯過這一點? :D – Esailija

+0

@dandavis爲了好玩。問題是否有一種方法可以在分組之外引用「f」「。如果我不在'addEventListener'調用中放置'f'的括號,那麼它不會是「在分組內部」嗎? :P –

2

(function f() {}).prototype.constructor

2

感謝對JavaScript的漏任務,你總是可以只得到(幾乎)所有表達式的值:

(function f() {}).valueOf() // == function f() {} 
+0

'valueOf()'是一個正常的方法調用,恰好爲函數定義的方式返回函數本身。它不會「獲取任何表達式的值」 – Esailija

+0

只要結果具有valueOf(null和undefined不會),它就會獲得表達式結果的值,因此它的名稱。例如:(3 * 5).valueOf()== 15,(!0).valueOf()== true,等等... – dandavis