2011-12-21 17 views
1

私はここでfirebugを使用しており、これらのコードのようなものを示すためのブログ投稿を書こうとしています。関数式で匿名関数に名前を付けますか?

// Unnamed Anonymous Function 
var count1 = function() { 
    var x = 0, f; 
    f = function() { 
    x = x + 1; 
    return x; 
    }; 
    return f; 
}; 

// Named Anonymous Function 
var count2 = function cf() { 
    var x = 0, f; 
    f = function ff() { 
    x = x + 1; 
    return x; 
    }; 
    return f; 
}; 

var c = count1(); 
console.log(count1); // function() 
console.log(c); // function() 

var d = count2(); 
console.log(count2); // cf() 
console.log(d); // ff() 

ポイントは、放火犯はちょうどfunction()として無名関数をログに記録し、さらにあなたはそれがスクリプト]タブにあなたをナビゲートしますが、間違った位置に時々リンクをクリックして、あなたの無名関数はありません。

しかし、cf()ff()のような名前を付けると、それがどの機能であるかを簡単に思い出すことができます。

この例ではコードは短いですが、大規模アプリケーションで作業する場合などは短くなります。 ASP.net Webフォームのスクリプトリソースで、関数の名前がどうにかしてデバッグ時の日を節約できますか?

P.S.私は関数式よりも関数式が好きです。

答えて

1

名前付き関数式は、デバッグには最適ですが、古いバージョンのInternet Explorerでは問題が生じる可能性があるので注意してください。

This articleは、すべての詳細になりますが、ショートバージョンは、IEでNFEsが、彼らはあなたがあなたが持つべきではない方法でクリーンアップする必要がありますさせる、関数宣言であるかのように掲揚なっ巻き上げることができるということです。

+0

なぜ:if(...){g = function(){}}} else {g = function(){}};} f = g; – RobG

+0

@Rob - 関数式がもはや指定されていないので、IEの問題を取り除くことは間違いありません。私が理解しているように、関数exprを最初に指定する*唯一の理由は、デバッグ情報を改善することです.FireBugやChromeのツールがどれほど優れているかはわかりません。 –

+0

これまでに知り得なかったこと、ありがとう@アダム! –

関連する問題