私は中規模の JavaScript API の 1 つを「多数のグローバル変数と関数」から、jQuery やその他のよく考えられた JavaScript ライブラリで使用される名前空間のカプセル化に似たものに変換しようとしています。これを実現するために、匿名関数を使用しています。
コードの一部を次に示します。
(function(window, undefined) {
var MyLib = (function() {
var AbortProgram = true;
function DisplayAbortProgram() { alert('AbortProgram inside=' + AbortProgram); }
return { AbortProgram: AbortProgram, DisplayAbortProgram: DisplayAbortProgram }
} ())
window.MyLib = MyLib;
})(window);
MyLib.AbortProgram = false;
alert('AbortProgram outside=' + MyLib.AbortProgram);
MyLib.DisplayAbortProgram();
実行すると、AbortProgram の外側の値は false ですが、内側の値は true のままです。この投稿は、これが起こっている理由を確認するためのものですか? その return ステートメントが DisplayAbortProgram の値を返し、それへの参照ではないためだと思います。根本的な理由は、JavaScript が参照ではなくプリミティブ型の値を返すことです。オブジェクトは参照によって渡されます。
私はこれを読んで、そのブール変数への参照を返す方法がないと信じているので、SetAbortProgram(value) という関数を実装する必要があります。