使用coffeescript和Rails 3.1.0.rc4。代码如下:
yourMom = (location) ->
console.log location
yourMom "wuz hur"
当页面加载时,它会正确地输出"wuz hur“。但是当我试着打电话给
yourMom("wuz hur")
从chrome js控制台(就像我有时测试正常的JS函数一样),我得到一个"ReferenceError: yourMom is not defined“。
coffeescript生成的函数是否以这种方式可用?
发布于 2011-09-13 17:48:05
共享全局方法/变量的一种更简单的方法是使用@,这意味着。
@yourMom = (location) ->
console.log location
yourMom "wuz hur"
更好的语法和更容易阅读,但我不鼓励您创建全局方法/变量
发布于 2011-07-20 09:37:02
之所以会发生这种情况,是因为coffeescript将所有内容包装在一个闭包中。该代码JavaScript输出实际上是:
(function() {
var yourMom;
yourMom = function(location) {
return console.log(location);
};
yourMom("wuz hur");
}).call(this);
如果您想要将其导出到全局作用域,您可以这样做:
window.yourMom = yourMom = (location) ->
console.log location
或
this.yourMom = yourMom = (location) ->
console.log location
发布于 2011-07-20 13:20:25
我不太确定Rails,但是CoffeeScript编译器有一个选项(--bare)可以在不使用函数包装器的情况下进行编译。玩起来很好,但它确实污染了全局范围。
https://stackoverflow.com/questions/6756044
复制相似问题