CoffeeScript中的函数

Nat*_*pos 49 javascript coffeescript

我正在尝试将functionJavascript 转换为CoffeeScript.这是代码:

function convert(num1, num2, num3) {
    return num1 + num2 * num3;
}
Run Code Online (Sandbox Code Playgroud)

但是我怎么能在CoffeeScript中做到这一点?


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

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

<script type="text/javascript">
    convert(6, 3, 10);
</script>
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我得到一个错误说: ReferenceError: Can't find variable: convert

怎么纠正这个?

law*_*sea 78

您需要将convert函数导出到全局范围.
请参阅Coffescript如何从其他资产访问功能?

window.convert = (num1, num2, num3) ->
  num1 + num2 * num3
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是正确的.必须强调的是,一旦附加到`window`,`window.convert`就可以从任何地方访问,只需`convert`; 但是编写`convert =`会创建一个名为`convert`的变量,带有本地`var`范围. (5认同)

jai*_*ime 33

@lawnsea答案很棒.

我只想补充一些想法.

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

window.App = {}
Run Code Online (Sandbox Code Playgroud)

然后,您可以访问App全局并在那里添加所有内容.convert现在可以用这种方式表达函数:

App.convert = convert = (a, b, c) -> a + b * c
Run Code Online (Sandbox Code Playgroud)

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

convert 1,2,3
Run Code Online (Sandbox Code Playgroud)

现在全球

App.convert 1,2,3
Run Code Online (Sandbox Code Playgroud)

  • 我完全同意. (4认同)

twf*_*twf 17

在coffeescript文件的顶层,这个(也就是@)应该引用窗口.所以要在这里附上它,你可以用速记:

@convert = (num1, num2, num3) -> num1 + num2 * num3
Run Code Online (Sandbox Code Playgroud)

但请注意,这会污染全局命名空间.由jm发布的解决方案更为谨慎.但你可以替换

window.App = {}
Run Code Online (Sandbox Code Playgroud)

@App = {}
Run Code Online (Sandbox Code Playgroud)

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


edo*_*lin 5

window.convert = (num1, num2, num3) ->
  num1 + num2 * num3
Run Code Online (Sandbox Code Playgroud)