【问题标题】:How to use setTimeout() in Coffeescript如何在 Coffeescript 中使用 setTimeout()
【发布时间】:2013-11-08 23:27:41
【问题描述】:

我似乎无法使用 setTimeout() 来调用我自己的函数之一。我可以使用 setTimeout 来调用 alert(),但不是我自己编写的函数。这是重现问题的最简单代码:

我有以下咖啡脚本

    setTimeout(run, 1000)

    run = () ->
        console.log("run was called!")

生成以下Javascript

    // Generated by CoffeeScript 1.6.3
    (function() {
      var run;

      setTimeout(run, 1000);

      run = function() {
        return console.log("run was called!");
      };

    }).call(this);

控制台不会打印任何内容。

【问题讨论】:

  • 我不知道coffeescript,但看起来你试图调用一个你应该只是传递参数/等的函数。
  • setTimeout(() => { // Some code }, 1000);

标签: coffeescript


【解决方案1】:
run = () ->
    console.log("run was called!")
setTimeout(run, 1000)

对于使用语法function run(){} 声明的函数,您依赖javascript function hoisting,但是coffeescript 将它们声明为变量:var run = function(){},因此您必须在引用它之前定义该函数,否则它仍然是undefined你把它传给setTimeout

【讨论】:

    【解决方案2】:

    匿名选项:

    彼得完全正确。但你也可以使用setTimeout 而不声明变量:

    setTimeout ->
        console.log 'run was called!'
    , 1000
    

    产量:

    (function() {
        setTimeout(function() {
            return console.log("run was called!")
        }, 1e3)
    }).call(this);
    

    【讨论】:

    • 垃圾回收怎么样?一口气可以吗?
    • 这个答案中至关重要的是,coffeescript 中的 console.log 语句之前有 4 个空格。如果只有 2 个空格,它将不起作用。在 Coffeescript 中,每个制表符或 2 个空格缩进一级。
    • 单行:setTimeout((-> someFunction()), 1000)
    • 4 个空格不再重要,或者从来没有,或者只是在某些特定情况下。
    猜你喜欢
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多