1

これはとても奇妙に思えます。

私は次のものを持っています

$.when.apply(null, arrayOfDeferredObjects).then(function(result)) {
    if (1 == arrayOfDeferredObjects.length){
       //stuff done here
    }
    else{
        for (var index = 0; index < contentUnits.length; index++) {
            if(arguments && arguments[index][0] && arguments[index][0].response) {
               //stuff done here
            }
        };
    }

私の予想では、引数は、Deferred の配列内の 1 つの呼び出しに対して 1 つのオブジェクトの配列になり、遅延配列内の X 呼び出しに対して X オブジェクトの配列になります。

なぜこれが起こっているのかはわかっていますが、配列の長さをチェックするのはイライラします。オブジェクトが 1 つしかない場合、Arguments は配列ではなく、1 つ以上ある場合です。それは明らかです。最初の呼び出しを表すだけでなく、返されるパラメーターを作成するためにできることはありますか?

4

1 に答える 1

1

このような引数は、常に直接関数のコンテキストを反映し、外部のコンテキストを参照することはありません。また、元の配列への参照を使用しましたが、このコードに基づいて変更されることはありません。

元の配列とArgumentsオブジェクトは同じものではなく、メンバーと同じオブジェクト参照を持っているだけです。引数は配列ではなく、常に長さのプロパティがあります(ステートメントに基づいて、引数について誤った仮定をしていると思います)。

then関数パラメーターの引数は、when呼び出しの延期のタイプと数によって異なります。仕様を参照してください。

最後に、反復されたContentUnits変数が表示されていないため、実際に機能するコードを投稿することはできません。

私はあなたがやろうとしていることをするためのより良い方法があると思います、あなただけがあなたがやろうとしていることを実際に言わなかっただけです。によってあると思います

于 2011-12-20T01:53:09.647 に答える