Следующий код CoffeeScript:
do (a) ->
console.log a
генерирует это:
(function(a) {
return console.log(a);
})(a);
Как передать значение в подобное?
(function(a) {
return console.log(a);
})("hello");
Следующий код CoffeeScript:
do (a) ->
console.log a
генерирует это:
(function(a) {
return console.log(a);
})(a);
Как передать значение в подобное?
(function(a) {
return console.log(a);
})("hello");
do (a = 'hello') ->
console.log a
Будет генерировать именно то, что вы хотите.
Хотя, я должен признать, что я не вижу смысла делать это. Если вы действительно хотите, чтобы a принимал литеральное значение 'hello' внутри этой области действия, то зачем создавать другую область? С a, являющимся нормальной переменной, объявленной как a = 'hello', будет достаточно. Теперь, если вы хотите заменить a на значение другой переменной (которая может измениться в цикле или что-то еще) и сделать do (a = b) ->, то я думаю, что это имеет смысл, но вы можете просто сделать do (a) -> и просто использовать a вместо b внутри области do.
Если вы используете Module Pattern, полезно использовать $global при использовании нескольких библиотек Javascript, которые могут конфликтовать друг с другом
mySingleton = do ($ = jQuery) ->
colorIt -> $('.colorme').css('backgroundColor', 'red')
mySingleton.colorIt()
do - специальное ключевое слово в CoffeeScript. Это создает закрытие. Я думаю, вам нужно что-то вроде этого:
log = (msg) ->
console.log msg
Скомпилируется:
var log;
log = function(msg) {
return console.log(msg);
};
Используйте его как любую другую функцию: log("hello")
вы могли бы сделать это
do (a = "foo")->
console.log a
Но зачем вы это делаете? Каков более полный вариант использования, который вы пытаетесь реализовать