1

今のところ、変数の命名の問題を避けるために、自己実行型の匿名関数を使用しています。

(function () {
    var a, b, c;
    a = 5;
    b = 10;
    c = 15;
    console.log('No problema!');
]());

また、 onload 関数を使用することも代替アプローチであることを知っています。

window.onload = function () {
    var a;
    a = 25;
    console.log('Yay!!!');
}

しかし、自分のコードが関数内に完全に閉じ込められているのが本当に嫌いです。自己実行関数の使用を避けるのに役立つ、JavaScript オブジェクトで使用できるアプローチはありますか?

4

2 に答える 2

2

今日のほとんどのブラウザーでは、関数は単純カプセル化の単位です。変数のスコープを作成する場合は、関数に対してローカルにします。

しかし、今日では、多くのサーバー側 JavaScript がインストールされているため、モジュールが存在し、その多くはrequire.jsに基づいています。Nodejs を使用してアプリを作成する場合は、既に使い慣れているでしょう。

ただし、JavaScript の次のバージョンは間もなく登場します。ES6、ES.next、Harmony、または JavaScript.next と名付けられたこの新しい JavaScript には、情報を隠すためのモジュールとブロック スコープが含まれます。現在、多くのブラウザーがこの言語の機能を実装し始めています。http://repl.itなどで実験できます。Google のTraceur コンパイラを使用して、多くの ES6 提案を含む言語を現在の JavaScript にコンパイルできます。

TL;DR: 今のところ: ブラウザの機能に固執してください。または、サーバー側アプリケーションに require.js を使用します。ES6 が来るので、ちょっと待ってください。

于 2012-07-20T03:01:01.747 に答える
1
var MyObject = (function() {
    var _variableHidden = 1;

    return {
        variableVisible: 2
    };
})();

MyObject.variableVisible //= 2
MyObject._variableHidden //= undefined

これを「Reevealing Module Pattern」と呼びます。スコープを使用して変数を非表示にしながら、プロパティとメソッドを返されたオブジェクトにアタッチして使用できるようにすることができます。このパターンやその他のパタ​​ーンについて詳しくは、http: //addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascriptをご覧ください。

このアプローチは「自己実行」関数を削除しませんが、スコープ外で使用できるようにしながら、スコープと変数の非表示の利点を維持できます。

また、これらは自己実行機能ではないことにも注意してください。彼らは自分自身を実行しません。私たちは実際に彼らのためにそれを行います:)。ただの私のペットピーブです、ハハ。

于 2012-07-20T03:01:18.017 に答える