25

自分の関数の 1 つを呼び出すために setTimeout() を使用できないようです。setTimeout を使用して alert() を呼び出すことはできますが、自分で作成した関数は使用できません。問題を再現する最も単純なコードは次のとおりです。

次のcoffeeScriptがあります

    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 に答える