最近、私は自分の会社で生産コードがクロージャー関数で返されるのを見てきました。そして、私はこれreturn (function() {...}());
を見るのが好きではありませんが、私は信頼できる情報源ではありません. なぜ、いつ、これを使用するのが良いか悪いかを StackOverflow に尋ねてみようと思いました。
* ノート *
これらの関数はすべて既に閉鎖されているため、名前空間の汚染について心配する必要はありません。
例1a:
function foo(bar) {
return {
x: 1 + bar,
y: 1 - bar,
duration: (function() {
var i = 0,
len = 5;
var results = 0;
for (; i < bar; i++) {
results += 1 + (results * bar);
}
return results;
}())
};
}
例1b:
function barProcess(bar) {
var i = 0;
var len = 5;
var results = 0;
for (; i < bar; i++) {
results += 1 + (results * bar);
}
return results;
}
function foo(bar) {
return {
x: 1 + bar,
y: 1 - bar,
duration: barProcess(bar)
};
}
例1c:
function foo(bar) {
var i = 0;
var len = 5;
var results = 0;
for (; i < bar; i++) {
results += 1 + (results * bar);
}
return {
x: 1 + bar,
y: 1 - bar,
duration: results
};
}
観察:
例 1a:
内部関数は、必要に応じてクロージャを利用します。
例 1b:引数リストが長くなり、維持するのが困難になる可能性のあるクロージャーが必要になる
場合があります。barProcess
Example1c:
呼び出しごとに余分な関数が作成されることはありません。デバッグするのが最も簡単です(私の意見では)。
例 a、b、または c を使用する必要がある理由について、技術的な理由を教えていただければ幸いです。
だから、私の不自由な答えは私を満足させなかったので、私はこれを試しました. JS パフォーマンス テスト. これは、私の観察がそれほど遠くないものになると思います。