25

我似乎无法使用 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);

没有任何内容打印到控制台。

4

2 回答 2

26
run = () ->
    console.log("run was called!")
setTimeout(run, 1000)

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

于 2013-10-29T17:04:54.423 回答
23

匿名选项:

彼得完全正确。但是您也可以setTimeout在不声明变量的情况下使用:

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

产量:

(function() {
    setTimeout(function() {
        return console.log("run was called!")
    }, 1e3)
}).call(this);
于 2015-03-24T04:02:14.373 回答