我在test.js中有以下Coffeescript
yo () -> console.log("yo")
当通过coffee -o public / javascripts / -cw public / coffeescripts /编译时,我得到public / javascripts / test.js:
// Generated by CoffeeScript 1.4.0
(function() {
var yo;
yo = function() {
return console.log('yo');
};
}).call(this);
我正试图在HTML文件中以通常的方式包含它:
<script src="/javascripts/test.js" type="text/javascript"></script>
<script type='text/javascript'>
//<![CDATA[
$(function() {
alert('before yo');
yo();
alert('after yo');
});
//]]>
</script>
然而,我一直得到“未捕获的参考错误:你没有定义哟”。什么是实际使用Coffeescript生成的javascript的过程?
答案 0 :(得分:3)
在CoffeeScript文件中,yo
是一个局部变量。它不是一个全局变量。如果您想使用其他JavaScript文件中的变量或HTML文件中的JavaScript,那么您需要将yo
作为全局变量。
您可以在CoffeeScript文件中执行此操作,如下所示:
yo = -> ...
# either
@yo = yo
# or
window.yo = yo
答案 1 :(得分:2)
从您的Coffeescript生成的Javascript需要调整以在调用上下文之外导出yo
。
// Generated by CoffeeScript 1.4.0
(function(context) { // changed this line (note: context == 'this' which is being passed in at last line)
var yo;
yo = function() {
return console.log('yo');
};
context.yo = yo; //export yo to the context.
}).call(this);
通常,当代码在网页上下文中使用时(而不是服务器代码),您会看到人们传递this
和/或window
,而不是document
。 side.js调用上下文)。
我更新了Javascript,但您可以轻松使用“模块导出”惯用法,您可以在此处详细了解 - Pattern for CoffeeScript modules