Han*_*ver 29 javascript coffeescript
我一直在看CoffeeScript,我不明白你将如何编写这样的代码.它如何在语法中处理嵌套的匿名函数?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
Mat*_*ggs 44
实际上没有编译它,但这应该工作
(($) ->
app = $.sammy ->
this.get '#/', ->
$('#main').text ''
this.get '#/test', ->
$('#main').text 'Hello World'
$(->
app.run()
)
)(jQuery);
Run Code Online (Sandbox Code Playgroud)
Tre*_*ham 35
马特的答案是正确的,但这是另一种方法:
在CoffeeScript 1.0(在提出这个问题几个星期后发布)中,do引入了一个运算符,它运行紧随其后的函数.它主要用于捕获循环中的变量,因为
for x in arr
do (x) ->
setTimeout (-> console.log x), 50
Run Code Online (Sandbox Code Playgroud)
(它将引用传递给x匿名函数)的行为与
for x in arr
setTimeout (-> console.log x), 50
Run Code Online (Sandbox Code Playgroud)
后者将arr重复输出最后一个条目,因为只有一个x.
无论如何,你应该知道do一种在没有额外括号的情况下运行匿名函数的方法,尽管它在参数传递方面的能力目前有点受限.我提出了扩大它们的建议.
目前,相当于您的代码示例
do ->
$ = jQuery
...
Run Code Online (Sandbox Code Playgroud)
如果我的提议被接受,则可以写
do ($ = jQuery) ->
...
Run Code Online (Sandbox Code Playgroud)
代替.
小智 5
短款
do ($=jQuery)->
app = $.sammy ->
@get '#/', -> $("#main").text ''
@get '#/test', -> $('#main').text 'Hello world'
$ -> app.run()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32298 次 |
| 最近记录: |