Причина, по которой вы не можете вызывать функцию CoffeeScript напрямую, заключается в том, что CoffeeScript оборачивается в немедленно вызываемую функцию при компиляции.Это сделано для того, чтобы ваш код не загрязнял глобальное пространство имен.
Как правило, это хорошая идея ™, но, конечно, вы можете обойти ее, когда вам нужно.Если вы хотите, чтобы функция или другая переменная были доступны везде (то есть глобальная область), вы можете просто сказать
window.myName = -> "Bob"
Таким образом, функция добавляется непосредственно в глобальную область,и вы можете вызывать его из любого места как window.myName()
(или просто как myName()
, если только функция не скрывается за локальной).
Однако, чтобы поддерживать глобальное пространство имен как можно более чистым, лучше всегоопределите пространство имен для себя (как это делает jQuery, поместив все в объект $
).Например, в вашем первом файле CoffeeScript или JavaScript (то есть в первом загружаемом файле) вы можете сделать что-то вроде этого
window.myNamespace = {};
Затем, когда вы захотите, чтобы что-то было доступно в другом месте, вы можете добавить егов это пространство имен:
window.myNamespace.myName = -> "Bob"
И затем вы можете вызывать его из любого места, используя window.myNamespace.myName()
или просто myNamespace.myName()
.
В качестве альтернативы, вы можете использовать "назначение, если не определено" или "null" CoffeeScriptоператор в верхней части всех ваших файлов:
window.myNamespace ?= {} # create myNamespace if it doesn't already exist
В зависимости от того, какой файл будет оценен первым, будет создан отсутствующий объект window.myNamespace
.Последующий код просто увидит, что он уже существует, и пропустит назначение.Дело в том, что он всегда будет доступен, независимо от порядка оценки.
Редактировать: Сделано myNamespace
нижний регистр верблюдов, так как он в основном переменный;не конструктор / класс
Приложение: Вы можете избежать оболочки функций, используя переключатель командной строки -b/--bare
, но, как уже упоминалось, оболочка - это хорошо.