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 选项。 决定是用这个命令编译coffeescriptcoffee -b --compile somefile.coffee whatever.js
我第一次在***上写过,我很惊讶这么快的答案。谢谢你,对不起我的英语不好。
@user2513522 - 由于您是 *** 的新手,您是否知道如果有人帮助您找到答案,您可以通过单击左侧的绿色复选标记将他们的答案标记为已接受的答案他们的回答。这将奖励他们一些声望点来帮助你,并为你赢得一些声望点来遵循所需的程序。声誉积分将为您赢得该网站的特权。以上是关于Coffeescript函数未定义[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 CoffeeScript 文件上运行 Jasmine 测试时对象未定义错误
从html文件中的coffeescript文件调用函数[重复]