Анонимные функции синтаксис в CoffeeScript
-
09-10-2019 - |
Вопрос
Я смотрел на CoffeeScript И я не понимаю, как вы пишете код как это. Как он обрабатывает вложенные анонимные функции в его синтаксисе?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
Решение
на самом деле не скомпили это, но это должно работать
(($) ->
app = $.sammy ->
this.get '#/', ->
$('#main').text ''
this.get '#/test', ->
$('#main').text 'Hello World'
$(->
app.run()
)
)(jQuery);
Другие советы
Ответ Мэтта правильный, но вот альтернативный метод:
В 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
Как способ запустить анонимную функцию без дополнительных скобок, хотя его возможности в отношении прохождения аргументов немного ограничены в данный момент. Я поднял А. предложение расширить их.
В настоящее время эквивалент вашего примера кода будет
do ->
$ = jQuery
...
Если мое предложение принято, можно будет написать
do ($ = jQuery) ->
...
вместо.
Короткий вариант
do ($=jQuery)->
app = $.sammy ->
@get '#/', -> $("#main").text ''
@get '#/test', -> $('#main').text 'Hello world'
$ -> app.run()