0

Q: 別の関数内にある関数内にあるローカル スコープの名前は何ですか?

説明させてください:

使用したい命名規則に問題があります。以下に簡単な例を示します。

!function($, window, undefined) {
    var Variables = {};
    Variables.X = 1;

    function myFunction() {
        var local = {};
        local.X = 2;
        $('.myClass').each(function() {
            var local = {};
            local.X = 3;
        });
    }
}(jQuery, window);

ここで、「変数」というオブジェクトを使用して、関数間で共有されるすべてのオブジェクトを格納することにしました。必要に応じて、外側の !function() {} 定義内に限定されたグローバル スコープ。

そして、「local」というオブジェクトを使用して、関数内にあるすべてのオブジェクトを格納することにしました。私の問題は、関数内の関数の範囲です。関数を一意にするために、関数の名前を何らかの方法で組み込む必要があると思います。この簡単な例では、local.X が 2 つの別個の変数であることを知っています。しかし、人間が読みやすいように、個別に名前を付けたいと思います。今から 6 か月後に戻って、local.X とは何かを考えたくありません。

問題に加えて、それは匿名関数であるため、「ローカルスコープ」を一意に識別できるようにするために関連付ける関数名がありません。コールバック関数内で変数が必要な場合は、コールバック関数に名前を付けて、ローカル スコープをその名前に関連付けるというルールを作成する必要があるかもしれません。

4

2 に答える 2

2

スコープを設定しようとしている方法は少し奇妙で、Javascript がこれを処理するように設計されている方法を実際には利用していません...

より標準的なアプローチは次のようになります。

function($, window, undefined) {
    var x = 1;

    function myFunction() {
        var y = 2;
        $('.myClass').each(function() {
            var z = 3;
        });
    }
}(jQuery, window);

もちろん、同じ変数名を再利用したいようです...最も外側x には、myPlugin.xなどの名前空間を与えることができますが、渡された関数のローカルスコープを設定しようとしても、eachあまり意味がありません...それ自体の外にあるものに影響を与えるためには、 のスコープ内で変数を使用する必要がありますmyFunction

于 2013-02-24T20:00:31.260 に答える
2

セマンティクスに頼ることをお勧めします。つまり、すべての(匿名であっても)関数には、作成され目的があります。

また、さらに 2 つの利点があります。1) 読みやすさの向上、2) 自己証明コード (つまり、スコープに意味のある名前を付けるのに問題がなければ、それはモデルが優れていることを意味し、それに従って設計することを意味します)。単一責任の原則)。

お役に立てれば。

于 2013-02-24T20:10:52.403 に答える