CoffeeScript do, передать аргумент

Следующий код CoffeeScript:

do (a) ->
    console.log a

генерирует это:

(function(a) {
  return console.log(a);
})(a);

Как передать значение в подобное?

(function(a) {
  return console.log(a);
})("hello");

Ответ 1

do (a = 'hello') ->
  console.log a

Будет генерировать именно то, что вы хотите.

Хотя, я должен признать, что я не вижу смысла делать это. Если вы действительно хотите, чтобы a принимал литеральное значение 'hello' внутри этой области действия, то зачем создавать другую область? С a, являющимся нормальной переменной, объявленной как a = 'hello', будет достаточно. Теперь, если вы хотите заменить a на значение другой переменной (которая может измениться в цикле или что-то еще) и сделать do (a = b) ->, то я думаю, что это имеет смысл, но вы можете просто сделать do (a) -> и просто использовать a вместо b внутри области do.

Ответ 2

Если вы используете Module Pattern, полезно использовать $global при использовании нескольких библиотек Javascript, которые могут конфликтовать друг с другом

mySingleton = do ($ = jQuery) -> 
   colorIt -> $('.colorme').css('backgroundColor', 'red')

mySingleton.colorIt()

Ответ 3

do - специальное ключевое слово в CoffeeScript. Это создает закрытие. Я думаю, вам нужно что-то вроде этого:

log = (msg) ->
  console.log msg

Скомпилируется:

var log;

log = function(msg) {
  return console.log(msg);
};

Используйте его как любую другую функцию: log("hello")

Ответ 4

вы могли бы сделать это

do (a = "foo")->
    console.log a

Но зачем вы это делаете? Каков более полный вариант использования, который вы пытаетесь реализовать