- ベストアンサー
コールバック関数(?)をループしたいのですが………
下記のようなコールバック関数(?)が10コ続いているとき、 for文か何かでループさせ分かりやすく書きたいのですが、どうすれば良いでしょうか? $('#id1').hoge(params, options, function(){ $('#id2').hoge(params, options, function(){ //処理 }); }); ※jQuery利用してます
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
同じ params, options を用いて、対象のidだけ替えて同じ処理をするものと解釈しました。 関数 hoge() のほうをパラメータとid(配列)を渡すと、その配列の要素数だけ処理後に再帰するようなしくみにしておけばよいのでは? 関数コールは hoge(params, options, ["#id1", "#id2", "#id3"]); のような感じ。 hoge()の方は内容が不明なのでかけませんが、雰囲気として function hoge(params, options, elements){ var index = arguments[3] || 0; if(elements[index]){ //element[index]に対して処理を行なう(indexをインクリメント) ~~~~, function(){ //←コールバック関数 hoge(params, options, elements, index); }; } } みたいな感じでどうでしょうか? これを上述のように呼び出せばよろしいかと…
その他の回答 (2)
- fujillin
- ベストアンサー率61% (1594/2576)
ANo2です。 ちょっとわかりにくかったかも。 『hogeメソッドを実行するhogehoge関数を作る』と言ったほうが良かったかもしれません。 さらに、そのhogehogeをメソッド化しておくという考えもあるかと思いますが、多分、必要ないのではと思います。
お礼
補足ありがとうございました。 ・初めarguments[3]ってどこにあるのだろう? とちょっと悩みました ・大変勉強になりましたー
- think49
- ベストアンサー率59% (285/482)
for文は同じ作業を繰り返す際に有効な文ですが、入れ子になると関数スコープが異なるので同じ作業ではありません。 複数のcallback関数を渡して内部で関数を作り直せば理論上は実装できるとは思いますが、実装が複雑になるのでお勧めしません。 とりあえず、入れ子にならない設計になるようにアルゴリズムを考え直すか、現コードが読みやすいと思えるまで目を慣らすか。 コードが断片的過ぎてアルゴリズムを見直す余地があるかはわかりませんが、関数hogeを何度もcallするなら関数hogeを見直す余地はあるかもしれません。
お礼
回答ありがとうございましたー
お礼
回答ありがとうございます。 >同じ params, options を用いて、対象のidだけ替えて同じ処理をするものと解釈しました ・整理できていないこちらの意向を汲み取っていただきありがとうございます! ・おかげで希望通り動作させることができました >var index = arguments[3] || 0; ・ループと言えばfor文しか頭に思い浮かばないのですが、再帰処理でこういう書き方も出来るとは目からうろこでした ・大変参考になりましたー