質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

258閲覧

コールバックについて

WeilSpinor

総合スコア170

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/03/30 12:52

JavaScriptでコールバック関数の勉強をしています。その過程で、「コールバックとは何か」「そもそも関数とは何か」という壁に当たり、今一度それらの理解をきっちりしようと思いました。

そこで、質問なのですが、
コールバックおよびコールバック関数について、その意味は以下のような説明で合っていますか?
ご回答よろしくお願いします。
###コールバックとは
コールバックとは、関数呼び出しの意味である。
関数名の後に続けて()と書くと、言語処理系はそれをもって「関数呼び出し(コールバック)が発生した」と判断し、

問答無用でその関数を実行する。

関数名()

コールバック関数を書く際に、引数の関数に()を書いてはいけないのはそのためである。

しかし、()を書いてもコールバック判定されないケースがある。それは、
関数を定義する時である。
つまり

function myFunc(){…}

function(){…}

と書いた時は、コールバックが生じない。

だから、もしコールバック関数に引数を指定したい時など、どうしても()を記述しないといけない時は、

doSomething(function(){ myCallback();//被コールバック関数 });

と書けば良い。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

同じことの繰り返し

真面目に回答する事も考えましたが、また同じ事の繰り返しになるのが目に見えています。

WeilSpinor さんがPromiseの質問をしたのが3週間前。この時に私は回答で「コールバック関数」に触れました。
この時、WeilSpinor さんは多くの誤解をしていて、回答でそれらを指摘しましたが、解決済みにはせずにずっと放棄され続け、今も放置されています。
そして本質問で「コールバック関数の質問」をしましたが、その質問も間違いだらけでした。
他の多くの質問も同様であり、相当数の質問が「解決済み」になっていません。
ここで質問に回答したとして、おそらく、WeilSpinor さんはその回答からも多くの誤解をし、また別の質問をする未来が私には見えます。
ひょっとしたら、解決せずに放置するかもしれません。

問題に対して、もっと真摯に取り組んでください

質問を解決せずに放置することは、回答してくれる方に失礼です。

右も左も分からない状態で質問しないでください

私の経験上、良い質問は、「全体の9割を理解しており、残り1割が理解出来ない」という具合のものです。
私が今までWeilSpinorさんを見たところでは、全体の7割以上は理解できていない状態で質問しているように見受けられます。
この状態で回答をもらってもWeilSpinorさんが回答を理解することは出来ません。

もっと優しい問題からチャレンジして下さい。
どれぐらい優しいかというと、全体の9割を理解できる難易度の課題です。
何も分からないのなら、自分で理解できる程度に平易な説明のあるチュートリアル風の書籍を一冊買って、完全に理解できるまで何度でも読み直し、コードを書いてください。

(2019/03/30 22:57追記)
※下記の私のコメントでも「課題への取り組み方」に触れています(この質問も放置されていますが)。

Re: WeilSpinor さん

投稿2019/03/30 13:46

編集2019/03/30 13:57
think49

総合スコア18166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WeilSpinor

2019/03/30 14:40

ご回答ありがとうございます。 参考にさせていただきます。 今回の質問に関しましては、 とりあえず、コールバックより前に、 **以下のより基本的な3つの項目**の理解が必要であることを発見したので、 まずはそこから始めようと思います。 ・キューとスタック(FIFOとLILO)を使った普通の関数(同期処理)の実行モデルの理解 ・同上の非同期処理のモデルの理解 ・「関数の開始と終了」の理解 私が初めて読んだJavaScriptのベストセラー入門書はじめ、様々な学習リソースにおいて、 上記についての説明がないままsetTimeoutなど非同期関数を説明していました。 そういったものに影響されてしまう私の、**審美眼の弱さ**と**リサーチ能力不足**のため、 **無謀にも、上記3項目の学習を済まさずに、いきなりコールバックという概念を把握しようという暴挙に出てしまった** のだと思います。 まずはこれら3項目について説明した入門者向け書籍等のリソースを探してみようかと思います。
guest

0

ベストアンサー

コールバックとは、関数呼び出しの意味である。

いいえ。
ひとことで言うと、引数に関数を渡して、それを実行させることにより結果を戻させる処理です。その時に渡される関数を「コールバック関数」と呼びます。

コールバック関数を書く際に、引数の関数に()を書いてはいけないのはそのためである。

まあ、そうですね。

しかし、()を書いてもコールバック判定されないケースがある。それは、

関数を定義する時である。

うーん、まあ、そうですね。

だから、もしコールバック関数に引数を指定したい時など、どうしても()を記述しないといけない時は、……と書けば良い。

うーん、まあ、そうですね。言葉の使い方は引っかかりますが。
というか、コールバックを理解せずに Promise を学ぼうとしていたのは、だいぶ回り道でしたね。
ほとんど理解できなかったでしょう?
JavaScript - 【JavaScript】Promiseオブジェクトとdoneとは、一言で言って何ですか?|teratail
コールバックが理解できれば、Promise の理解に一歩近づくと思います。がんばってください。

投稿2019/03/30 13:15

編集2019/03/30 13:18
Lhankor_Mhy

総合スコア36134

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WeilSpinor

2019/03/30 14:27

ご回答ありがとうございます。 Promiseについては、 もともと、最短の道のりで簡易なハースマホアプリを作ろうと思っていて、そのためにはJavaScriptとmonacaを使ったハイブリッドアプリが良い、ということで、手始めに見た簡単なメモ帳アプリのサンプルコードにおいて、データベースへのメモ書き込み処理において出てきた、 と記憶しております。 Promiseへの道のりは長いと判断して諦め、さらに色々な考えからスマホアプリ開発も一旦諦め、 まずはプログラミングの基本とWebの理解から、ということで、HTML、PHPを中心に、時々JavaScriptという感じで勉強しております。 そういうわけで、Promiseはおろか、非同期処理も当分使うことはなさそうなので、勉強しないことに決めていたのですが、 最近AjaxやaddEventListener、ログイン処理、などについて学んでいると、非同期処理、コールバック、という概念が何度も出てきたので、再び勉強の必要を感じました。 とはいえ、現段階で非同期処理の必要性を感じていないので、何とも微妙です…。(自分からなにかを作る過程で概念の必要性を感じないと覚えられない性質です) とりあえず、コールバックより前に、以下の3つの項目の理解に努めようと思いました。 ・キューとスタック(FIFOとLILO)を使った関数の実行モデル ・同上の非同期処理のモデル ・関数の開始と終了
Lhankor_Mhy

2019/03/30 14:40

> コールバックより前に、以下の3つの項目の理解に努めようと思いました。 ?? では、なぜこの質問をしたんです?
WeilSpinor

2019/03/30 14:44

質問時点では把握しておりませんでした。 質問した後に、 リサーチを進める中で 上記3項目の理解が必要である、 ということを知りました。 誤解を招く投稿をしてしまい、申し訳ありません。
Lhankor_Mhy

2019/03/30 14:52

なるほどね。 きっと根が正直な方なんでしょうけれど、社会に出たらそういうことは思っていても言わない方がいいでしょう、と助言しておきます。 「あなたの回答はもう必要なくなりました」と言われて、いい気分になる人はあまりいないです。
WeilSpinor

2019/03/30 15:03

不快な思いをさせてしまい、大変申し訳ありませんでした。 >「あなたの回答はもう必要なくなりました」と言われて、いい気分になる人はあまりいないです。 そのようなつもりは微塵もありませんでした。 間違いのご指摘を頂いた上、 激励のお言葉までいただき、大変感謝しております。 プログラミングの習得だけでなく、 誤解や不快感を招かないようなコミュニケーション能力の習得、 注意力の習得に励んでいきたいと思います。
WeilSpinor

2019/03/30 15:07

ちなみに、 >とりあえず、コールバックより前に、以下の3つの項目の理解に努めようと思いました。 ・キューとスタック(FIFOとLILO)を使った関数の実行モデル ・同上の非同期処理のモデル ・関数の開始と終了 この発言は、 「コールバックを理解するためのさらに前段階として、この3項目の理解が必要である」 という考えで、 「Promiseより前にコールバック」という話題を受けての発言でした。 追記失礼いたしました。 (ご返信は結構です)
think49

2019/03/30 15:13

To: WeilSpinor さん > とりあえず、コールバックより前に、以下の3つの項目の理解に努めようと思いました。 私の回答への返信なら概ね納得できる内容でした。 それを伝えるべき相手を間違えているように思えます。
WeilSpinor

2019/03/30 15:25 編集

think49様 そうだったかもしれません。 寝る前で疲れていたせいもあるかもしれませんが、 「相手の立場から見て、違和感のある会話の流れ、失礼に感じる返答」 ということを考える力に欠けていたかもしれません。 悪気はなく、感謝しかないのですが、そう受け取られなくても仕方ありません。 全ては、私の失態です。
Lhankor_Mhy

2019/03/30 15:33

> WeilSpinor さん そっちではなくて、 > とはいえ、現段階で非同期処理の必要性を感じていないので、何とも微妙です…。 の方です。 必要性を感じていない微妙な状態で質問をしてみて、回答がついたものの、やっぱり必要なかったわ、という話に読めますよね。 そもそも、コールバックの理解が間違っていることは、「コールバック」でググって一番上のページを読むだけで気づくはずです。 以前の質問にもggrksって書いたじゃないですか? このまま行くと、あなたは「教えて君」になってしまいそうな気がするのですが。 https://ja.uncyclopedia.info/?curid=7372 https://stardust774.wixsite.com/home
WeilSpinor

2019/03/30 15:51

確かに、ご指摘を受けて初めて気付きました。 これは失礼に受け取れてしまっても仕方がないですね。 大変失礼いたしました。 この失態を無駄にせず、猛省し、注意力の向上に努めてまいりたいと思います。 また、初心者ということを免罪符にして、 「初心者だから手取り足取り教えてもらって当然」 と考える情けない『教えて君』にはならないように気をつけたいと思います。
Lhankor_Mhy

2019/03/30 15:54

すみません、なんだかいろいろ言いすぎてしまったようです。 これに懲りずにご質問していただければ幸いです。
WeilSpinor

2019/03/30 15:57

いえ、全ては私の失態です。 夜にすみませんでした。 もしお許しくださるのであれば、 また機会があれば、よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問