バックグラウンド
私はよくモジュール パターンを使用してコードを整理し、関数と定数が必要に応じて動作するようにします。CONSTANT
またはsomeFunc
が のみで使用される場合、 前者の 2 つがグローバル スコープを汚染しないように、 の定義を無名関数でanotherFunc
囲みます。anotherFunc
これにより、名前の競合を回避でき、コードを後で確認して、何が何に依存しているかを確認できます。
ただし、この戦略は多くのクロージャーを作成します。これらの依存関係を明示的に渡す方がパフォーマンスが向上するかどうか (および保守性も向上するかどうか) を考えています。これには、変数を見つけるために関数がたどらなければならないスコープ チェーンを最小限に抑える効果があると思います。
モジュール パターン自体に関するフィードバックを許可するために、3 つのバージョンを含めました。1) モジュール パターンなし、2) モジュール パターンあり、3) モジュール パターンあり、スコープ チェーンの最小化。
モジュールパターンなし
var SHARED_CONSTANT;
var SOME_CONSTANT = 5;
var INNER_CONSTANT = {};
var inner = function(y) {
return y !== {};
};
var outer = function g (x) {
doSomething();
$(...).load(inner);
};
モジュール パターンあり、スコープ チェーンの最小化なし
var SHARED_CONSTANT;
var outer = (function() {
var SOME_CONSTANT = 5;
var inner = (function() {
var INNER_CONSTANT = {};
return function /* inner */ (y) {
return y !== {};
};
}());
return function /* outer */ (x) {
doSomething();
$(...).load(inner);
};
}());
モジュール パターンとスコープ チェーンの最小化を使用
var SHARED_CONSTANT;
var outer = (function($, SHARED_CONSTANT) {
var SOME_CONSTANT = 5;
var inner = (function(SOME_CONSTANT, SHARED_CONSTANT) {
var INNER_CONSTANT = {};
return function /* inner */ (y) {
return y !== {};
};
}(SOME_CONSTANT, SHARED_CONSTANT));
return function /* outer */ (x) {
doSomething();
$(...).load(inner);
};
}(jQuery, SHARED_CONSTANT));
概要
パフォーマンスが向上するバージョン (およびその理由) は? パフォーマンスの違いは重要ですか?(つまり、スコープ チェーンのルックアップは高価ですか?) メモリ使用量はどうですか? (つまり、変数を渡すことで、本質的にスコープを複製していますよね?)