好吧,我知道什麼是FunctionDeclaration
和FunctionExpression
之間的差異。 @CMS做了一個解釋的great job。直到最近,我以前用的是相同的語法創建lambda表達式和命名空間以下Douglas Crockford's例如:的JSLint抱怨函數表達式語法命名空間
(function() {
"use strict";
}());
他所持該convention如下:
當一個功能就是要立即調用,整個調用表達式應該包裝在parens中,以便明確正在生成的值是函數的結果,而不是函數本身。
該語法非常適用於lambda表達式,因爲它們返回一個值。但是,名稱空間不返回值。因此,我現在更喜歡使用下面的語法命名空間,而不是(從JavaScript Garden拍攝):
(function() {
"use strict";
})();
使用這種語法是作爲背後的基本原理如下:
(// evaluate the function inside the paranthesis
function() {}
) // and return the function object
() // call the result of the evaluation
使用這種語法對於命名空間對我更有意義,因爲:此語法分隔了命名空間和調用;並且Douglas Crockford's語法期望該函數返回一個值。
但是,當我通過JSLint傳遞此語法時,出現錯誤,指出「Move the invocation into the parens that contain the function.
」。我不明白爲什麼它會抱怨這個語法。這是一個廣泛使用和接受的語法。
我打算通知Douglas Crockford關於這個問題。但是,在我這樣做之前,我會感謝您提供的任何反饋。也許最好是堅持自己的語法?請解釋你的觀點。
它抱怨的語法,因爲這是克羅克福德先生的意見,它應該。這就是JSLint的全部內容:機器人封裝了Crock對JavaScript編碼風格的看法。 – Pointy
事實上,當JSLint強加給每個人的首選編碼風格時,這真的很煩人。我經常使用JSLint,並且很難看到我完美的語義良好的代碼生成錯誤。 –
對於不想遵循Crockfords標準的人來說[jsHint](http://www.jshint.com),他不會去改變他們,因爲他花了很多時間來確定JavaScript的團隊開發的最佳實踐。 – JaredMcAteer