2013-10-29 14 views
18

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

私は何もコンソールに出力されていない次の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(run, 1000) 

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

を持っています。あなたはそれを渡したときに、それ以外の場合はundefinedはまだだ、あなたはそれを参照する前に関数を定義する必要がありますので、var run = function(){}

+0

を私はCoffeeScriptのを知りませんが、それはあなたがあなただけのパラメータを/渡すべきである関数を呼び出ししようとしているように見えます –

答えて

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

あなたは構文function run(){}で宣言された関数についてjavascript function hoistingに依存しているが、CoffeeScriptのは、変数としてそれらを宣言しますsetTimeout

12

匿名オプション:

ピーターは正確です。しかし、あなたはまた、変数を宣言せずにsetTimeout使用することができます。

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

収量:

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

ガベージコレクションはどうですか?可能な限り? – nottinhill

+0

この答えで重要なのは、coffeescriptの 'console.log'文の前に4つのスペースがあることです。スペースが2つしかない場合、動作しません。 Coffeescriptでは、各タブまたは2つのスペースが1つのレベルにインデントされます。 – gm2008

+0

1行で: 'setTimeout(( - > someFunction())、1000)' –

関連する問題