@function in CoffeeScript does not work as advertised
rails 3.2.8。在将我的一些 JS 函数转换为 CoffeeScript 时,我遇到了几个问题,这些问题说像这样声明一个函数:
1 | @foo = (bar) -> |
将
以下是有效的方法:
1 2 3 | foo = (bar) -> window.foo = foo |
这样,我在
这两者之间有很大的不同。
例如:
1 2 3 4 5 6 7 8 9 | bar = (baz) -> @bar = 5 lemon = @bar + baz @foo = (bar) -> lemon return @ Bar = new bar(12) |
翻译为:
1 2 3 4 5 6 7 8 9 10 11 12 13 | var Bar, bar; bar = function(baz) { var lemon; this.bar = 5; lemon = this.bar + baz; this.foo = function(bar) { return lemon; }; return this; }; Bar = new bar(12); |
查看生成代码的小提琴演示:http://jsfiddle.net/maniator/rXWw2/
这是一个显示 CoffeeScript 及其生成代码的链接
我只是想添加一些对理解为什么最初很重要的东西
@foo = () -> "abc"
不添加到全局窗口对象。
Coffeescript wraps - 一旦编译,它将每个 .coffee 文件的所有内容package到一个立即执行的周围匿名函数中。
因此,明确地出于这个原因,全局命名空间没有被污染,从而隐含地保护开发人员不创建"邪恶"全局变量。
因此,您的 foo 成为匿名package函数的成员函数 - gg 多么无用...
我想无论如何你想要的是你的全局配置对象或其他东西,你只需添加你的定义 --- 你肯定不是为了现在快速和轻松地访问而真正创建全局变量,是吗? :)