Функции в кофейном файле недоступны с других js
Я пытаюсь использовать coffeescript в моем Grails-проекте. Чтобы достичь этого, я решил использовать плагин coffeescript-resources. Но скомпилированный кофе в представлении результатов выглядит следующим образом:
(function() {
var someFunc;
someFunc = function() {
return alert("hello");
};
}).call(this);
и в этом случае я не могу это назвать. Я не нашел надлежащих конфигураций в документации плагина, чтобы избежать использования анонимных функций при компиляции coffee-файла. Как я могу решить это?
1 ответ
Лексический обзор и переменная безопасность
[...]
Хотя для ясности эта документация исключена из этой документации, все выходные данные CoffeeScript заключены в анонимную функцию:(function(){ ... })();
Эта защитная оболочка в сочетании с автоматической генерациейvar
ключевое слово, чрезвычайно затрудняет случайное загрязнение глобального пространства имен.Если вы хотите создать переменные верхнего уровня для использования другими сценариями, прикрепите их как свойства к окну или к объекту экспорта в CommonJS. Экзистенциальный оператор (описан ниже) дает вам надежный способ выяснить, где их добавить; если вы ориентируетесь как на CommonJS, так и на браузер:
exports ? this
Таким образом, существует самозапускающаяся функция-обертка, которая предотвращает загрязнение глобального пространства имен. Если вы хотите поместить что-то в глобальное пространство имен, тогда вы должны поместить это туда явно; в браузере вы можете сделать это используя:
window.someFunc = -> alert('hello')
или же
@someFunc = -> alert('hello')
@someFunc
Форма предполагает, что вы находитесь в верхней части области (то есть не внутри другой функции или класса).
Кроме того, вы можете найти способ скомпилировать ваш CoffeeScript с --bare
:
-b, --bare
Скомпилируйте JavaScript без функции-оболочки безопасности верхнего уровня.