【问题标题】:Functions In CoffeeScriptCoffeeScript 中的函数
【发布时间】:2011-09-06 14:26:30
【问题描述】:

我正在尝试将 function 从 Javascript 转换为 CoffeeScript。这是代码:

function convert(num1, num2, num3) {
    return num1 + num2 * num3;
}

但是我如何在 CoffeeScript 中做到这一点?


我正在尝试从这样的 HTML 源运行该函数:

<script type="text/javascript" src="../coffee/convert.js"></script>

<script type="text/javascript">
    convert(6, 3, 10);
</script>

但它不起作用,我收到一条错误消息:ReferenceError: Can't find variable: convert

如何解决这个问题?

【问题讨论】:

  • 给出的答案是正确的,但您真正应该做的是将剩余的 JS 从 HTML 中取出并放入外部 JS 或 CoffeeScript 文件中。 JS 不属于 HTML。

标签: javascript coffeescript


【解决方案1】:

您需要将转换函数导出到全局范围。
How can Coffescript access functions from other assets?

window.convert = (num1, num2, num3) ->
  num1 + num2 * num3

【讨论】:

  • 这个答案很准确。必须强调的是,一旦附加到windowwindow.convert 就可以从任何地方访问,就像convert 一样;但是写入convert = 会创建一个名为convert 的变量,其作用域为本地var
  • 漂亮的草坪,今天刚从 javascript(混合)调用函数时点击了这个。我记得匿名范围,但忘记了 Trevor 的建议,即把它贴在窗口上以使其在咖啡脚本的空间之外可以调用
【解决方案2】:

在您的 coffeescript 文件的顶层,this(又名 @)应该引用 window。因此,要将其附加到此处,您可以使用简写:

@convert = (num1, num2, num3) -> num1 + num2 * num3

请注意,这会污染全局命名空间。 jm- 发布的解决方案比较谨慎。但是你可以替换

window.App = {}

@App = {}

使用 @ 的好处是它引用 node.js 中的 global,因此您可以使用相同的代码在浏览器和服务器端环境中公开您的功能.

【讨论】:

    【解决方案3】:

    @lawnsea 的回答很棒。

    我只是想补充一些想法。

    我宁愿只向window 对象添加一个变量,而不是污染全局命名空间。

    window.App = {}
    

    然后,您可以在全局范围内访问App 并在那里添加您的所有内容。函数convert 现在可以这样表达:

    App.convert = convert = (a, b, c) -> a + b * c
    

    然后,在本地范围内调用函数

    convert 1,2,3
    

    现在在全球范围内

    App.convert 1,2,3
    

    【讨论】:

      【解决方案4】:
      window.convert = (num1, num2, num3) ->
        num1 + num2 * num3
      

      【讨论】:

        【解决方案5】:

        您应该查看 Godfoca http://www.slideshare.net/godfoca/lets-have-a-cup-of-coffeescript 今天刚刚发布的这些精彩幻灯片另外,您可以在 http://jashkenas.github.com/coffee-script/ 上通过网络尝试代码

        convert = (num1, num2, num3) ->
          num1 + num2 * num3
        

        【讨论】:

        • 认为你有一个杂散的空间:'->'
        【解决方案6】:
        convert = (num1, num2, num3) -> num1 + num2 * num3
        

        【讨论】:

          猜你喜欢
          • 2012-02-17
          • 2011-12-20
          • 2011-09-26
          • 2015-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-10
          • 2015-12-12
          相关资源
          最近更新 更多