我一直在关注CoffeeScript,我不明白你将如何编写这样的代码。它如何在语法中处理嵌套的匿名函数?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
答案 0 :(得分:44)
实际上没有编译它,但这应该可行
(($) ->
app = $.sammy ->
this.get '#/', ->
$('#main').text ''
this.get '#/test', ->
$('#main').text 'Hello World'
$(->
app.run()
)
)(jQuery);
答案 1 :(得分:35)
马特的回答是正确的,但这是另一种方法:
在CoffeeScript 1.0中(在提出此问题几周后发布),引入了do
运算符,该运算符运行紧随其后的函数。它主要用于捕获循环中的变量,因为
for x in arr
do (x) ->
setTimeout (-> console.log x), 50
(将对x
的引用传递给匿名函数)的行为与
for x in arr
setTimeout (-> console.log x), 50
后者只会重复输出arr
中的最后一个条目,因为只有一个x
。
无论如何,你应该知道do
是一种在没有额外括号的情况下运行匿名函数的方法,尽管它在参数传递方面的能力目前有点受限。我提出了proposal to broaden them。
目前,您的代码示例等效于
do ->
$ = jQuery
...
如果我的提案被接受,则可以写
do ($ = jQuery) ->
...
代替。
答案 2 :(得分:4)
短变种
do ($=jQuery)->
app = $.sammy ->
@get '#/', -> $("#main").text ''
@get '#/test', -> $('#main').text 'Hello world'
$ -> app.run()