Javascript CoffeeScript-函数正在运行,但它是;不是一个函数;

Javascript CoffeeScript-函数正在运行,但它是;不是一个函数;,javascript,coffeescript,Javascript,Coffeescript,谢谢你的帮助。我有一个简单的函数来逐个显示(或隐藏)元素,它是用CoffeeScript编写的。该功能运行良好,但我的Chrome会在控制台中抛出此消息 “未捕获类型错误:elemRoll(…)不是函数” 我做错了什么 elemRoll=(elemName、delayDuration、animationDuration)-> 金额=$(elemName).length $(元素名称)。每个(金额)-> $(this).delay(delayDuration*amount).animate{

谢谢你的帮助。我有一个简单的函数来逐个显示(或隐藏)元素,它是用CoffeeScript编写的。该功能运行良好,但我的Chrome会在控制台中抛出此消息

“未捕获类型错误:elemRoll(…)不是函数”

  • 我做错了什么
elemRoll=(elemName、delayDuration、animationDuration)->
金额=$(elemName).length
$(元素名称)。每个(金额)->
$(this).delay(delayDuration*amount).animate{'opacity':1},animationDuration
$(文档).ready->

do elemRoll'.epoch container.epoch item',190、160
您不需要
do
来简单地调用函数,并且很少希望为此使用
do
。您的就绪处理程序应该是:

$(document).ready -> 
  elemRoll '.epoch-container .epoch-item', 190, 160
  # No `do` in here

用于立即执行匿名函数:

CoffeeScript提供
do
关键字,该关键字立即调用传递的函数,转发任何参数

通常,当您需要闭包包装器时,它用作循环体:

for e in array
  do (e) -> ...
您还可以使用它在循环外执行匿名函数:

do (a) -> ...
变成以下JavaScript:

(function(a) { /* ... */ })(a);
a(b)();
您还可以使用它来执行无参数函数,而不使用括号,这样
dof
就变成了
f()

你的问题是:

do a b
被解释为

do a(b)
这就变成了JavaScript:

(function(a) { /* ... */ })(a);
a(b)();
因此,你的:

do elemRoll '.epoch-container .epoch-item', 190, 160
与写作相同:

f = elemRoll '.epoch-container .epoch-item', 190, 160
do f
CoffeeScript假设
elemRoll'.epoch container.epoch item',190160
将返回一个函数

此外,您需要非常小心,并与您的空白保持一致,否则可能会发生非常混乱的事情