CoffeeScript 中的函数

Posted

技术标签:

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

我正在尝试将 functionjavascript 转换为 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。 【参考方案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

【讨论】:

以上是关于CoffeeScript 中的函数的主要内容,如果未能解决你的问题,请参考以下文章

从html文件中的coffeescript文件调用函数[重复]

无法访问另一个CoffeeScript文件中的函数?

从木偶中的父级扩展 Coffeescript 子类函数

Rails - 从 JavaScript 调用 CoffeeScript

PhpStorm / WebStorm中的CoffeeScript JSDoc支持

放置在另一个文件中的子类的继承(CoffeeScript)