Coffeescript功能未定义

时间:2014-04-06 15:56:02

标签: javascript coffeescript

我创建了一个coffeescript函数square=(x)->alert x*x
它被编译成这个javascript

(function() {
  var square;

  square = function(x) {
    return alert(x * x);
  };

}).call(this);

因此,如果我编写此代码<button onclick="square(5)">,编译器会说square()未定义。怎么了?

1 个答案:

答案 0 :(得分:3)

您的函数square必须是全局定义的函数才能从您定义的HTML中调用它。但是这段代码:

(function() {
  var square;

  square = function(x) {
    return alert(x * x);
  };

}).call(this);

不全局定义函数,因此无法找到符号。实际上,功能方块仅在您的IIFE中定义,并且在其他任何地方都不可用。如果您希望全局可用,您也可以将上面的块更改为:

window.square = function(x) {
    return alert(x * x);
}

或者,你可以这样做:

(function() {
    this.square = function(x) {
       return alert(x * x);
    };
}).call(this);

或者,显然在CoffeeScript中,@符号是this.的简写,所以你可以使用它:

(function() {
    @square = function(x) {
       return alert(x * x);
    };
}).call(this);

甚至只是这个:

@square = function(x) {
   return alert(x * x);
};

有关详细信息,请参阅此其他答案:How do I define global variables in CoffeeScript?


更好的方法是不使用这种调用方法。如果您使用事件监听器,那么您根本不必使该功能全局化。