【问题标题】:CoffeeScript - function runnning but it "is not a function"CoffeeScript - 函数正在运行,但它“不是函数”
【发布时间】:2017-02-09 13:31:31
【问题描述】:

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

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

  • 我做错了什么?

 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

【问题讨论】:

    标签: javascript coffeescript


    【解决方案1】:

    您不需要do 来简单地调用一个函数,而且您很少会为此目的使用do。您的现成处理程序应该是:

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

    CoffeeScript's do 意味着立即执行匿名函数:

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

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

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

    您还可以使用它在循环外执行匿名函数:

    do (a) -> ...
    

    变成这个 JavaScript:

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

    您也可以使用它来执行不带括号的无参数函数,因此 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 将返回一个函数。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 2021-07-31
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      相关资源
      最近更新 更多