2011-10-26 27 views
1

時,當我的jsfiddle與JSLint的測試這個code snippet,它給了我這個陌生的警告:奇怪的JSLint錯誤測試代碼片段

問題在第3行字10:無法設置屬性「第一」 未定義

但是,如果我聲明for循環之外(即之前)的變量currentNumber,它不會抱怨。

這是什麼原因?

+0

您顯示錯誤的小提琴。您當前鏈接的小提琴是有效的,並且不包含'.first'屬性設置器。 –

+0

@Rob W當它執行(並且不包含第一個屬性)時,如果單擊JSLint按鈕,它仍會顯示錯誤。 – helpermethod

+0

它不會在Firefox 7.0.1中抱怨,它在抱怨什麼瀏覽器? – Caimen

回答

3

看起來像jsFiddle或JSLint中的錯誤,說實話...如果我嘗試for (var i = 0; i < 10; ++i) {}它給出了同樣的錯誤。如果我拿出var它停止抱怨。

+0

是的,請參閱:http://stackoverflow.com/questions/4646455/jslint-error-move-all-var-declarations-to-the-top-of-the-function/6411669#6411669 –

+0

這是一個錯誤?這正是JSLint聲稱做的。 – Jere

+0

@是的,正確的錯誤報告應該是'將'var'聲明移動到函數的頂部,而不是'不能'首先'未定義'的屬性。 – mergeconflict

2

JSLint將要在函數頂部的var聲明。你在jsfiddle中遇到的特定錯誤很奇怪,但JSLint的投訴並不意外。

問題在第3行字符6:將'var'聲明移動到函數的頂部。

http://www.jslint.com/

警告!

JSLint會傷害你的感情。

...

var語句應該是函數體中的第一條語句。

+0

+1這是一個被廣泛接受的做法嗎?我知道JS中的變量具有函數範圍,但對我來說這似乎很奇怪。 – helpermethod

+1

使用var關鍵字當然非常重要,因爲您通常不想流入全局範圍。至於把所有var聲明放在頂端,這是個人選擇,JSLint似乎認爲這顯然是個好主意。輕鬆識別函數中的所有局部變量可能更容易,但對我而言,這很愚蠢。我寧願在需要的時候聲明變量,接近相關的代碼。特別是對於循環變量......它不會讓任何人看到一個變種,在一個函數的頂部。 – Jere