0

私は何時間も見回しましたが、正直なところ、なぜこれが機能しないのかわかりません。スコープは理解できましたが、これは .popular メソッドのコールバックと関係があると思います。何かアドバイス?

var filters = [];  //Global

INSTAJAM.media.popular(function(popular){

    for (i in popular.data){
        filters.push(popular.data[i].filter); //Pushing to Global
    }

    console.log(filters); //Works fine

});

console.log(filters); //Empty array
4

2 に答える 2

2

これらは、2番目の console.log(filters) が空になる理由として私が考えることができる理由です:

  1. INSTAJAM.media.popularおそらく非同期関数であり(おそらくajax呼び出しの結果として、後でコールバックを呼び出します)、2番目を実行するconsole.log(filters);と、ajax呼び出しはまだ完了していないため、グローバルfilters変数を設定するコールバックはまだ呼び出されていないか実行されていません.
  2. var filters = [];は実際にはグローバルではありません。
  3. スコープ内に名前が付けられた別の変数がfiltersあるため、実際にはグローバル変数を変更していません。

コールバックを受け取るの構造に基づいてINSTAJAM.media.popular、私の推測は #1 です。非同期 JavaScript とは、逐次実行順序で物事が起こらないことを意味します。代わりに、次のようなものを呼び出しますINSTAJAM.media.popular(fn)。しばらくして、ajax 呼び出しが完了すると、コールバックが呼び出されます。これは、呼び出しの直後にあるコードINSTAJAM.media.popular(fn)は、その呼び出しの結果を使用できないことを意味します。代わりに、これらの結果を使用するコードは、コールバック自体に含まれているか、コールバックから呼び出される必要があります。

于 2013-03-10T03:18:44.373 に答える
0

あなたが参照することができますwindow.filters

于 2013-03-10T02:54:04.093 に答える