【问题标题】:how to write setTimeout with params by Coffeescript如何用 Coffeescript 编写带有参数的 setTimeout
【发布时间】:2011-09-21 12:35:21
【问题描述】:

请告诉我如何在下面的coffeescript中编写javascript。

setTimeout(function(){
    something(param);
}, 1000);

【问题讨论】:

  • 我们如何添加 .call('hello') 到这个

标签: javascript settimeout coffeescript


【解决方案1】:
setTimeout -> 
  something param
, 1000

【讨论】:

  • 如果您只想使用匿名函数,这是最好的。
  • 对于命名函数,setTimeout namedFunc, 5000
  • 请注意,空格很重要。调用的间隔必须与上面完全相同。如果something paramsetTimeout 在同一行,则解析方式不同。
【解决方案2】:

我发现这是最好的方法,

setTimeout (-> alert "hi"), 1000

【讨论】:

    【解决方案3】:
    setTimeout ( ->
      something param
    ), 1000
    

    括号是可选的,但以逗号开头的行对我来说似乎很乱。

    【讨论】:

    • 拿出纸巾,喝杯咖啡,~)
    • 不为我编译带括号。我不得不删除它们,以逗号开头,它就像一个魅力。
    • 带括号也可以一行完成。
    • @JeremyThille 请注意,setTimeout 和开头括号之间的空格很重要。那里的空格表示括号围绕闭包作为 setTimeout 的第一个参数;如果它直接在 t 之后,那么 coffescript 会期望括号将两个参数括起来。
    【解决方案4】:

    另一种选择:

    setTimeout(
        -> something param
        1000
    )
    

    【讨论】:

      【解决方案5】:

      我认为回调作为函数的最后一个参数是一个有用的约定。例如,Node.js API 通常就是这种情况。所以考虑到这一点:

      delay = (ms, func) -> setTimeout func, ms
      
      delay 1000, -> something param
      

      当然,这增加了对每个 setTimeout 进行的额外函数调用的开销;但是在今天的 JS 解释器中,性能缺陷是微不足道的,除非您每秒执行数千次。 (无论如何,你在做什么设置每秒数千次超时?)

      当然,更直接的方法是简单地命名你的回调,这往往会产生更易读的代码(jashkenas 是这个成语的忠实粉丝):

      callback = -> something param
      setTimeout callback, 1000
      

      【讨论】:

      • 很好,除非你需要嵌套回调
      【解决方案6】:

      这将产生大致相同的翻译(感谢@Joel Mueller):

      setTimeout (-> something param), 1000
      

      请注意,这不是精确的翻译,因为匿名函数返回调用 something(param) 的结果,而不是像您的 sn-p 中的未定义。

      【讨论】:

      • 括号/分号太多!这是 CoffeeScript,去掉多余的括号是成功的一半。 setTimeout (() -> something param), 1000
      • Nicholas 指出空括号也是可选的。
      猜你喜欢
      • 2011-09-06
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      相关资源
      最近更新 更多