2

我在 test.js 中有以下 Coffeescript

yo () -> console.log("yo")

当通过 coffee -o public/javascripts/ -cw public/coffeescripts/ 编译时,我得到 public/javascripts/test.js:

// Generated by CoffeeScript 1.4.0
(function() {
  var yo;

  yo = function() {
    return console.log('yo');
  };

}).call(this);

我正在尝试以通常的方式将其包含在 HTML 文件中:

<script src="/javascripts/test.js" type="text/javascript"></script>
<script type='text/javascript'>
  //<![CDATA[
  $(function() {
    alert('before yo');
    yo();
    alert('after yo');
  });
  //]]>
</script>

但是我不断收到“未捕获的参考错误:未定义哟”。实际使用 Coffeescript 生成的 javascript 的过程是什么?

4

2 回答 2

3

在您的 CoffeeScript 文件中,yo是一个局部变量。它不是全局变量。如果您想从另一个 JavaScript 文件或 HTML 文件中的 JavaScript 使用该变量,则需要创建yo一个全局变量。

您可以像这样在 CoffeeScript 文件中执行此操作:

yo = -> ...

# either
@yo = yo
# or
window.yo = yo
于 2013-01-24T16:45:03.930 回答
2

从您的 Coffeescript 生成的 Javascript 需要进行调整才能导出yo到调用上下文之外。

// Generated by CoffeeScript 1.4.0
(function(context) { // changed this line (note: context == 'this' which is being passed in at last line)
  var yo;

  yo = function() {
     return console.log('yo');
  };

  context.yo = yo; //export yo to the context.

}).call(this);

通常,this您是否会看到人们传入window和/或document在网页上下文中使用代码时(而不是服务器端 Node.js 调用上下文)。

我更新了 Javascript,但您可以轻松使用“模块导出”习语,您可以在此处阅读更多信息 - CoffeeScript 模块的模式

于 2013-01-24T17:07:12.123 回答