Как это записать в coffeescript?
f = (function(){
// something
})();
Спасибо за любые советы :)
Как это записать в coffeescript?
f = (function(){
// something
})();
Спасибо за любые советы :)
Ответы:
Хотя вы можете просто использовать круглые скобки (например (-> 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 раза.
-> console.log 'this runs right away'к f, а затем запускает его; yours запускает функцию, а затем присваивает ее результат f, как в исходном вопросе. (Хотя в случае console.log, возвращаемое значение всегда будет undefined.)
{f: do -> // something}
doтакже позволяет передавать аргументы функции. Передавать 1и 2в качестве параметров xи y, писать do (x = 1, y = 2) ->. (Документация по этой функции утеряна , но проблема, в которой эта функция была представлена, содержит несколько примеров.)
Если вы хотите присвоить псевдониму аргументы, передаваемые в функцию самозапуска в CoffeeScript, и скажем, это то, чего вы пытаетесь достичь:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Тогда do (window, document) ->не позволю тебе этого сделать. Тогда путь к паренсу:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
Вы также можете комбинировать doключевое слово с параметрами функции по умолчанию, чтобы заполнить рекурсивные «самозапускающиеся функции» начальным значением. Пример:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
попробуй использовать
do ($ = jQuery) ->
do ->
#your stuff here
Это создаст самоисполняющееся закрытие, которое полезно для определения области видимости.
Извините, я решил это:
f = (
() -> "something"
)()
doКлючевое слово имеет некоторые ограничения , которые делают необходимым использовать подход JS-стиль иногда (см выпуск 960 ); doдействительно был добавлен только из-за использования цикла с закрытием.
Должен быть
f = () ->
# do something
f = do -> console.log x