CoffeScript代码:
department = ->
console.log 1
这编译成js代码:
// Generated by CoffeeScript 1.6.3
(function() {
var department;
department = function() {
return console.log(1);
};
}).call(this);
我有一个按钮:
<button onclick = "department()" >add department</button>
但是当我点击它时会抛出一个错误:
未捕获的ReferenceError:未定义部门
那我该怎么办?
答案 0 :(得分:7)
这是因为你的函数department
不在全局范围内,而是在你编写为IIFE的匿名函数的闭包中。
<button onclick = "department()" >add department</button>
将在全局范围内查找函数department()
,但您没有。{/ p>
当您将处理程序编写为内联html属性时会发生这种情况。您可以使用javascript绑定事件,并在闭包中提供函数作为参考。
你可以这样做:
实施例: -
<button id="dept" >add department</button>
和
(function() {
var department;
department = function() {
return console.log(1);
};
window.onload = function(){
document.getElementById('dept').onclick = department;
}
}).call(this);
答案 1 :(得分:1)
旧帖子,但如果有人像我一样偶然发现这个......
在编译时只需添加 --bare
作为参数,以免将代码包装在匿名函数中。
然后我们不直接调用CoffeeScript,而是使用编译好的js文件,就像你自己用js写的一样。
<button onclick="getCoffee()">From CoffeeScript</button>
<script type="text/javascript" src="Resources/js/getcoffee.js"></script>
以这种方式在您的 CoffeeScript 中不需要任何特殊的东西。
getCoffee = () ->
alert "Delicious Coffee..."
答案 2 :(得分:0)
window.department = ->
console.log 1
在任何coffeescript函数之前 window
将使其成为全局
也
@window.department = ->
console.log 1
@
符号表示this
,在这种情况下是指document
。