Вызов функций coffeescript с консоли

Играя немного с coffeescript и Rails 3.1.0.rc4. Введите этот код:

yourMom = (location) ->
  console.log location

yourMom "wuz hur"

Когда страница загружается, это выводит "wuz hur" правильно. Но когда я пытаюсь позвонить

yourMom("wuz hur")

из консоли chrome js (как иногда бывает, чтобы проверить обычные функции JS), я получаю "ReferenceError: yourMom не определен"

Доступны ли функции, генерируемые coffeescript таким образом?

Ответы

Ответ 1

проще использовать общие методы/переменные, чтобы использовать @, что означает это.

@yourMom = (location) ->
  console.log location

yourMom "wuz hur"

Более чистый синтаксис и его легко читать, но я не рекомендую создавать глобальные методы/переменные

Ответ 2

Это происходит потому, что coffeescript завершает все в закрытии. Вывод JavaScript этого кода на самом деле:

(function() {
  var yourMom;
  yourMom = function(location) {
    return console.log(location);
  };
  yourMom("wuz hur");
}).call(this);

Если вы хотите экспортировать его в глобальную область, вы можете:

window.yourMom = yourMom = (location) ->
  console.log location

или

this.yourMom = yourMom = (location) ->
  console.log location

Ответ 3

Я не уверен в Rails, но у компилятора CoffeeScript есть опция (--bare) для компиляции без оболочки функций. Отлично подходит для воспроизведения, но он загрязняет глобальную область.

Ответ 4

эта ссылка может решить вашу проблему Rails - вызов CoffeeScript из JavaScript Оберните свои функции в уникальном пространстве имен, а затем вы сможете использовать эти функции из wnywhere