Следующий код 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
Но зачем вы это делаете? Каков более полный вариант использования, который вы пытаетесь реализовать