2010-11-12 47 views
27

我一直在寻找CoffeeScript,我不知道如何编写这样的代码。它如何处理其语法中的嵌套匿名函数?CoffeeScript中的匿名函数语法

;(function($) { 
      var app = $.sammy(function() { 

      this.get('#/', function() { 
       $('#main').text(''); 
      }); 

      this.get('#/test', function() { 
       $('#main').text('Hello World'); 
      }); 

      }); 

      $(function() { 
      app.run() 
      }); 
     })(jQuery); 
+4

的[CoffeeScript的网站(http://jashkenas.github.com/coffee-script/)具有*尝试的CoffeeScript *功能,它编译成JavaScript的飞行。我几分钟后就能找出答案。 – 2010-11-12 16:13:48

回答

41

实际上并没有编译它,但这应该工作

(($) -> 
    app = $.sammy -> 

    this.get '#/', -> 
     $('#main').text '' 

    this.get '#/test', -> 
     $('#main').text 'Hello World' 

    $(-> 
    app.run() 
) 
)(jQuery); 
+0

非常感谢你们 – Handloomweaver 2010-11-12 16:51:58

+11

由于coffeescript自动将代码封装在一个匿名函数中,所以实际上你可以在你的文件的顶部放置'$ = jQuery',并以jQuery作为参数调用一个匿名函数。 – 2011-02-06 06:23:03

+2

是啊,只是做一个线路端口的他的代码 – 2011-02-06 14:18:43

34

马特的答案是正确的,但在这里是一种替代方法:

在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) -> 
    ... 

代替。

+0

这种方法是非常好的,因为会计咖啡的哲学,它不需要任何右括号 – 2014-03-28 10:36:41

4

短变异

do ($=jQuery)-> 
app = $.sammy -> 
    @get '#/', -> $("#main").text '' 
    @get '#/test', -> $('#main').text 'Hello world' 
$ -> app.run()