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

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

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

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

Q&A

1回答

658閲覧

コールバック関数の呼び出しについて

aae_11

総合スコア178

JavaScript

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

0グッド

1クリップ

投稿2019/08/13 09:12

コールバック関数に関して、分からない部分があります。
以下は普通の関数呼び出しのコードになります。

//日付データを取得する function getDate() { var date = new Date; } //日付データを元に西暦を取得する function getYear(data) { var year = data.getFullYear(); }

以下は、コールバックを用いたコードになります。

function getDate(callback) { callback(new Date); } getDate(function(data) { getYear(data); });

上記2つは同じ処理をするコードになるのですが、いまいちコールバックの方のコードが分かりません。
getDate関数の引数にはgetYearメソッドを使用していますが、これはDateオブジェクトのメソッドであるかと思います。
それが何故、「data.getFullYear();」こちらのような形でなく、「getYear」と呼び出せているかが分からないです。

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

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

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

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

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

guest

回答1

0

上記2つは同じ処理をするコードになるのですが

ならないですね。下のコードブロックでは、getYearが定義されてないのでエラーです。質問者様がおっしゃるとおり、下のコードブロックではdata.getFullYearとする必要があります。

多分グローバル汚染されて偶然動いてるだけです。

投稿2019/08/13 09:54

papinianus

総合スコア12705

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

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

papinianus

2019/08/14 09:22

そうですね。この記事が何を目的にしているかわかりにくいですね。 ここで書かれているのは関数Aと関数Bを順に実行したい、だけれども、質問者様の一つ目のコードブロックのように2つ関数を定義しても上手く行かない、といいたいようです。 で、その次が説明が足りてないのですが、筆者は関数B(つまりgetYear)はそのままにして、関数Aを書き換えることで、ABを順次実行できるようにしてみた、と言いたいようです。 はっきり言ってサンプルが悪いです。この記事の例では単に引数や返り値のハンドリングが悪いだけで、コールバックの必要性は皆無です。 私は、質問者様は非同期処理を学びたいと想定してます。なので、先に非同期が関係ないコールバックの考え方を学びましょう。一気に2つをやるのは悪手だと感じます。 個人的にはソートに比較関数を渡す例がいい気がしますが、質問者様が他の例であげていらした、setTimeoutも頻出ですかね。変数に関数そのものを代入することにまず慣れましょう。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問