UI編程的本質Event driven。
在這個範例中,無論您使用何種語言,您都必須定義在事件發生時將運行的事件處理程序。 在您的例子是更具表現如果使用較不緊湊的語法:
$('div').on('click', reaction);
在純OOP(例如JAVA)反應將是實現特定接口的對象:
import java.util.Observer;
public class ResponseHandler implements Observer {
...
}
ResponseHandler reaction = new ResponseHandler();
現在,歡迎來到Javascript!
由於Javascript函數爲Higher-order,因此將函數作爲參數傳遞是常用操作,它們被命名爲callbacks。當定義這個回調函數時,javascript也非常冗長。
您必須使用全功能表達式來定義回調(有名或無名)。或者你可以移動到Coffescript化妝品來瀏覽這些函數定義(但它們只是語法糖,因爲函數定義是無論如何)。
您發明的{}語法或coffescript箭頭語法實際上隱藏了實際的反應。
$('div').on('click', reaction);
反應在JavaScript僅僅是一個函數,一個回調函數。
現在,jQuery事件是一個reactor engine的實現,允許您的應用程序代碼與實際引擎完全分離。這意味着jQuery應用程序是一組對事件反應的定義:
- 每當文檔準備就緒時,請執行此操作。
- 每當用戶點擊div,就這麼做。
- 每當鼠標進入跨度時,請做任何事情。
好吧,也許你可以創建另一個JS基於語言。 ECMAScript 6引入了[Arrow Functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/arrow_functions)。 – undefined
那麼你可能會喜歡Coffeescript。 – Thilo
請參閱[Javascript提示不要污染具有實用函數的全局名稱空間](http://blog.bigbinary.com/2009/03/18/javascript-tip-do-not-pollute-global-namespace-with-utility-functions .html) –