0

どうしても使わなければならない場合、どちらを使えばいいですか?

  • 方法 1 では、可能なパラメーターの組み合わせごとに 1 つの関数を作成しますが、呼び出すのは簡単です。
  • 方法 2 では、関数は 1 つしかありませんが、呼び出すのが難しくなります。

注: 実際のコードでは、すべてをグローバル スコープで作成するわけではありませんが、考え方は同じです。

       //Method 1:
       for(var key = 0 ; key < 1000 ; key++){
            for(var i = 0 ; i < 1000 ; i++){
                window[key + ' ' + i] = (function(key, i) { return function() {  aFunction(key, i); } })(key, i)
            }
        }

        //then I simply do
        //window['223 111']();

        //Method 2:
        for(var key = 0 ; key < 1000 ; key++){
            for(var i = 0 ; i < 1000 ; i++){
                window[key + ' ' + i] = ['aFunction',key,i]
            }
        }
        //then i need to do 
        //window[window['223 111'][0]](window['223 111'][1],window['223 111'][2]);
4

1 に答える 1

3

実際のパフォーマンスの問題がない限り、明快さと使いやすさを求めてください。

私はおそらくあなたの最初のバージョンを.bind()

for(var key = 0 ; key < 1000 ; key++){
    for(var i = 0 ; i < 1000 ; i++){
        window[key + ' ' + i] = aFunction.bind(window, key, i);
    }
}

IE8 以下では利用できませんが、shim することができます。


また、かなりの数のグローバル変数を作成しています。それらをすべて名前空間オブジェクトに入れることをお勧めします。

var NS = {}

for(var key = 0 ; key < 1000 ; key++){
    for(var i = 0 ; i < 1000 ; i++){
        NS[key + ' ' + i] = aFunction.bind(window, key, i);
    }
}

NS['223 111']();
于 2013-09-05T22:41:05.417 に答える