Как это записать в 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