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