-
1:ID:XYw9t8 · 2017-10-20

#質問 コールバック関数について
なんとなく理解した状態でjqueryでコールバック関数を使っていました。
しかし、よく考えたらわからない部分が多くて質問させていただきます。
jqueryやjsは初心者のため勉強中です。

function testA(callback){
callback();
}
function testB(){
}
testA(testB);

この書き方だとTESTAの処理が終わった後にTESTBの処理をおこなう。そこまでは理解しました。
function testAはユーザー定義関数というもので一連の処理をおこなう複数の命令の集まり。これをすることのメリットは何なのでしょうか。
また、「callback();」の意味がわかりません。
これはtestA(callback)に引数を渡す宣言と考えればいいのでしょうか。
いろいろな記事をあさってみましたがここら辺のことはわかっている前提で話が進むため理解が進みません。スクリプトに詳しい方教えてください。

4 件の回答

2:ID:DcLDdw · 2017-10-20

ご質問の意図と違っていたら申し訳ありませんが、ざっくりいうと

関数というのは処理のまとまりで、
共通の処理を繰り返し使うために定義するものです。
jQueryでいうshow()や、hide()などもユーザ定義関数となります。

この関数に引数を渡して、
いろいろなオプションを渡すことができるわけですが、
このオプションのひとつがコールバックという考え方です。
コールバックにするメリットは、関数の処理が全て終わってから実行される点にあります。

jQueryでいうと、
$('.a').hide(500);
$('.b').show(500);
だと、aが消え、bが表示されますが、このタイミングが同時です。

コールバックを使って、
$('.a').hide(500, function(){ $('.b').show(500); });
だと、aが消えたあとに、bが表示されます。
このタイミングを制御できるものです。

testBの callback(); は 引数を呼び出しているだけで、testAの引数に処理内容があれば実行するし、なければ実行しないとなります。 

運用中のサイトなどで、show(1000) をあちこちに使っているけど、show(1000) したあとに処理を実行しないといけない… でも、show()の処理内容を変えると影響範囲がでかすぎる。 ってときに、コールバックが用意されていると、他のところに影響なく、処理を追加できるというメリットがあります。

3:ID:0FhqNQ · 2017-10-21

> この書き方だとTESTAの処理が終わった後にTESTBの処理をおこなう。そこまでは理解しました。

元訪販員のオレからすると、この時点でYESとは言えないんだな。
TestA自体が行う処理が時間のかかるものであれば、先にTestAに渡したコールバック関数が実行終了するというケースも普通にあるわけだ。

function testA(callback){
callback();

const list = new Array(10000);
const result = list.map((v) => v )
console.log('testA')
}

function testB(){
console.log('testB');
}

testA(testB);

4:ID:erE0ma · 2017-10-22

何もできない上司でも、できる部下に命令できるってことだと思う。

コールって呼ぶってそのままの意味。
おい!田中この仕事やっとけ!と・・・

コールバックが禁止って言われたら、上司はなんも仕事できない。
だったら最初から、田中が上司になればええやんって思うだろうけど、
上司は部下を管理する役で、田中は能力者って肩書だから、
田中を上司にするわけにはいかないんだろうな。

5:ID:3MCC0a · 2017-10-22

Re:4
わかりにくい

コメントの受付は終了しました。

一緒に読まれている質問

ページ上部に戻る