Coffeescript --- Как создать самозапускающуюся анонимную функцию?
Как записать это в coffeescript?
f = (function(){
// something
})();
Спасибо за любые советы:)
Ответ 1
Хотя вы можете просто использовать круглые скобки (например, (-> foo)(), вы можете избежать их с помощью ключевого слова do:
do f = -> console.log 'this runs right away'
Наиболее частое использование do - это захват переменных в цикле. Например,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Без do вы просто будете печатать значение x после цикла 3 раза.
Ответ 2
Если вы хотите "псевдоним" аргументы, переданные функции self-invoking в CoffeeScript, и пусть это именно то, чего вы пытаетесь достичь:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Тогда do (window, document) -> не позволит вам это сделать. Путь идти идет с парнерами тогда:
(( global, doc ) ->
# your code here
)( window, document )
Ответ 3
Это смешно легко в кофе:
do ->
вернет
(function() {})();
Ответ 4
попробуйте использовать
do ($ = jQuery) ->
Ответ 5
Вы также можете комбинировать ключевое слово do с параметрами функции по умолчанию, чтобы вырезать рекурсивные "самоинициализирующие функции" с начальным значением. Пример:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
Ответ 6
do ->
#your stuff here
Это создаст самозавершающее закрытие, которое полезно для определения области видимости.