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, 160
将 return 一个函数。
此外,您需要非常小心并与空格保持一致,否则可能会发生非常混乱的事情。
感谢您的帮助。我有一个简单的函数来一个一个地显示(或隐藏)元素,它是用 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, 160
将 return 一个函数。
此外,您需要非常小心并与空格保持一致,否则可能会发生非常混乱的事情。