2009-03-12 10 views
3

私はJavaScriptのクロージャを理解していますが、私はそれがネストされた関数をどのように扱うかについてはわかりません。たとえば:JavaScriptのネストされた関数のメモリ使用

var a = function(o) { 
    o.someFunction(function(x) { 
     // do stuff 
    }); 
} 

私は新しいクロージャは、私が機能a呼び出すたびに作成されて知っているが、その閉鎖はまたsomeFunctionに渡された匿名関数の新しいインスタンスが含まれていますか?それは私が代わりにFFをした場合、より良いでしょう:あなたの最初の例で

var b = function(x) { /* do stuff */ } 
var a = function(o) { 
    o.someFunction(b); 
} 
+0

ちょうど怪しげになるためには、関数の終了後にセミコロンを付けるべきです。 var b = function(x){/ *処理する* /}; var a = function(o){o.someFunction(b);} }; – Fenton

答えて

3

と、呼ばれるたびに、無名関数を定義し、someFunction()に渡されます。これは、関数(今はbと呼ばれている)が一度しか定義されていないので、より効率的な方法である2番目の例よりも高価です。

私は数ヶ月前にこれに似た質問をしました。それはあなたにも役立つかもしれません。 Does use of anonymous functions affect performance?

+0

ありがとうございました。あなたの質問へのリンクは非常に役に立ちました。 – jtjin

関連する問題