2014-11-04 220 views
1

我最近開始使用JSLint,並且像許多我面對的「已定義之前使用」和「已經定義」。我在這裏經歷了一些解決方案,並且設法解決了一些問題,但現在我陷入了困境。我的代碼是這樣的:jslint clickHandler在它被定義之前被使用/已經定義

var foo; 
foo = addEventListener("click", clickHandler, false); 
... 
function clickHandler() {...}; 

這樣的代碼工作,但我得到了「使用之前定義」的警告。如果我將clickHandler添加到「var」中,那麼在我調用它的時候,它將會是未定義的,迫使我對代碼重新排序,並將處理程序的定義放在代碼中間(在我看來,可讀性較差)。有沒有一種方法可以使用clickHandler,但在使用後還有其定義?

+0

好的,你的問題是什麼? – 2014-11-04 23:07:46

+0

對不起,我以爲我寫過問題部分。修復。 – Tiagojdferreira 2014-11-05 10:19:53

+0

我想知道爲什麼jslint在這方面很勉強。函數foo()在* load *時間(即第一次)被解釋,而'var foo = function()'在* run *時間(即後面的時間)被解釋。除非您切換到'var foo = function()'樣式聲明,否則您的代碼應該運行。 – amphetamachine 2014-11-05 16:03:59

回答

2

你怎麼樣調整你的代碼

function clickHandler() {...}; 
var foo; 
foo = addEventListener("click", clickHandler, false); 
... 

有沒有一種方法可以讓我打電話使用clickHandler事件,但有它的定義,它被用來後?

當然,只是保持代碼的樣子。它會工作。 JSLint只是指出可能存在的問題或風格違規。並非所有抱怨的事實上都是一個問題。

如果您想要更柔韌的棉絨,請使用JSHint

+0

這會起作用,但會使我在文檔的開頭定義所有功能,而不是最終。作爲一個風格問題,我真的更喜歡函數的定義,因爲我發現它更易讀(首先是主程序的邏輯,然後是細節)。 – Tiagojdferreira 2014-11-05 10:22:29

+0

然後你使用JSLint運氣不佳。 ; ^)你必須做Felix在這裏通過的東西。 – ruffin 2014-11-05 14:29:48

+0

@Tiagojdferreira:正如ruffin所說,那麼不要使用JSLint。使用更加可配置的JSHint。 – 2014-11-05 15:58:37