Як написати це в 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