Як написати це в 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
, а потім запускає його; ваш запускає функцію, а потім присвоює її результат 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) ->
не дозволите вам цього зробити. Тоді шлях буде за допомогою parens:
(( 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