Coffeescript函数未定义[重复]

Posted

技术标签:

【中文标题】Coffeescript函数未定义[重复]【英文标题】:Coffeescript function is undefined [duplicate] 【发布时间】:2014-05-18 17:56:23 【问题描述】:

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

(function() 
  var square;

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

).call(this);

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

【问题讨论】:

从您的 pastebin 中,square 似乎被保存在闭包中,因此永远不会进入全局命名空间 【参考方案1】:

你的函数 square 必须是一个全局定义的函数,才能像你定义的那样从你的 html 中调用它。但是这段代码:

(function() 
  var square;

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

).call(this);

没有全局定义函数,因此找不到符号。实际上,函数 square 仅在您的 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?


最好不要使用这种调用方法。如果您改用事件侦听器,则根本不必使函数成为全局函数。

【讨论】:

但我写了一个全局的coffeescript函数,它奇怪地编译成匿名函数。怎么了? @user2513522 - 抱歉,我对咖啡脚本知之甚少,但我在回答中修改了我的建议以强制它是全球性的。 @user2513522 - 添加了其他几个 CoffeeScript 选项。 决定是用这个命令编译coffeescript coffee -b --compile somefile.coffee whatever.js我第一次在***上写过,我很惊讶这么快的答案。谢谢你,对不起我的英语不好。 @user2513522 - 由于您是 *** 的新手,您是否知道如果有人帮助您找到答案,您可以通过单击左侧的绿色复选标记将他们​​的答案标记为已接受的答案他们的回答。这将奖励他们一些声望点来帮助你,并为你赢得一些声望点来遵循所需的程序。声誉积分将为您赢得该网站的特权。

以上是关于Coffeescript函数未定义[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Coffeescript 未定义的类?

在 CoffeeScript 文件上运行 Jasmine 测试时对象未定义错误

从html文件中的coffeescript文件调用函数[重复]

在coffeescript中以编程方式/“按字符串”调用函数[重复]

Coffeescript奇怪的行为[重复]

在视图中包含带有 ERB 的 Coffeescript 文件