CoffeeScript - 功能正在运行,但它 "is not a function"

CoffeeScript - function runnning but it "is not a function"

感谢您的帮助。我有一个简单的函数来一个一个地显示(或隐藏)元素,它是用 CoffeeScript 编写的。该功能运行良好,但我的 Chrome 在控制台

中抛出此消息

"Uncaught TypeError: elemRoll(...) is not a function"

 elemRoll = (elemName, delayDuration, animationDuration) -> 
      amount = $(elemName).length
      $(elemName).each (amount) ->
       $(this).delay(delayDuration * amount).animate { 'opacity': 1 }, animationDuration

$(document).ready -> 
     do elemRoll '.epoch-container .epoch-item', 190, 160

您不需要 do 来简单地调用一个函数,而且您很少会想为此目的使用 do。您的 ready-handler 应该只是:

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

CoffeeScript's do 意思是立即执行一个匿名函数:

CoffeeScript provides the do keyword, which immediately invokes a passed function, forwarding any arguments.

通常在需要闭包包装器时用作循环体:

for e in array
  do (e) -> ...

你也可以用它在循环外执行匿名函数:

do (a) -> ...

变成这个JavaScript:

(function(a) { /* ... */ })(a);

您还可以使用它来执行不带括号的 argument-less 函数,因此 do f 变为 f().

你的问题是:

do a b

被解释为

do a(b)

变成这个 JavaScript:

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', 190, 160return 一个函数。

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