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

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

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

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

Q&A

解決済

3回答

1498閲覧

returnの扱い方について

dialbird

総合スコア379

JavaScript

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

0グッド

4クリップ

投稿2015/11/18 00:42

おはようございます。

returnに関する質問です。
先日教えていただいたifのコードの中にreturnを使った以下のようなものがありました。

javascript

1//if文 2function battle(num){ 3 if(num === 2){ 4 return counter; 5 }else if(num === 1){ 6 return lose; 7 }else{ 8 return beat; 9 } 10 }; 11

counter, lose, beatは関数名なのですが(返り値は指定していない)、今まで見てきたコードの中では、returnの後には数字か変数しか入ったものしか出てこなかったので、どういうことが起こっているのかわかりません。

returnの後に関数名を入れた場合、その関数を実行してくれるものか、とも考えたのですが、関数名の後に()をつけると動作が変わってきてしまいます........。

とどのつまりお伺いしたいのは、
・return 関数名();
・return 関数名;
の違いはあるのか?
ということです。

よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

JavaScriptは高階関数を扱えますので、関数をオブジェクトとして引数で渡したり、戻り値として返したりすることができる言語です。

質問者様のコードの例ですと、battle関数は与えられたnumに応じた関数を返す関数になります。

使用法としては、すごくシンプルに書くと以下のような形になります。

javascript

1var doBattle = battle(1); // ここでloseメソッドが変数doBattleに渡される 2 3doBattle(); // ここでloseメソッドを実行

とどのつまりお伺いしたいのは、
・return 関数名();
・return 関数名;
の違いはあるのか?

上述の通り、この違いは下記の通りです。

・return 関数名();
→ 関数の実行結果を返す

・return 関数名;
→ 関数そのものを返す

投稿2015/11/18 01:02

k.tada

総合スコア1679

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

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

dialbird

2015/11/18 01:25

早速のご返答ありがとうございます! お陰様でスッキリしました。 ありがとうございます!
guest

0

こんな感じです。

javascript

1function makeAdder(num1){ 2 return function(num2){ return num1 + num2 } 3} 4function not_makeAdder(num1){ 5 return function(num2){ return num1 + num2 }(3) 6} 7makeAdder(2); //function 8makeAdder(2)(3); //5 9var plusTen = makeAdder(10); 10plusTen(20); //30 11plusTen(100); //110 12not_makeAdder(1); //4 13not_makeAdder(1)(3); //error

投稿2015/11/18 01:12

Lhankor_Mhy

総合スコア36106

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

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

dialbird

2015/11/18 01:39

早速のご返答ありがとうございます! そして折角答えていただいたのに、申し訳なくも理解が追いつけていない現状であります........(ー ー;) 最初のmakeAdderが引数を2個利用しているもの、ということは分かるのですが、 ・notAdderの仕組み(なぜ{}の後にまた()がついているのか?) ・errorになる理由。 がわかりません。 是非とも教えてください。よろしくお願いいたします。
Lhankor_Mhy

2015/11/18 02:29 編集

> 最初のmakeAdderが引数を2個利用しているもの ちょっと違います。引数を2つ取る場合はこう書きますよね。 twoArg(arg1, arg2) 回答は、makeAdder()が関数を返すためにそこに()をつけてすぐに実行をしているわけです。 つまり、 makeAdder(2)(3) ↓ 【引数に2を足す関数】(3) ↓ 5 ということです。 > notAdderの仕組み こちらも同様で not_makeAdder(1) ↓ return function(num2){ return num1 + num2 }(3) ↓ return 【引数に1を足す関数】(3) ↓ return 4 ということになりますので、 not_makeAdder(1)(3) ↓ 4(3) ↓ 数値の4は関数ではないのでエラー ということです。
guest

0

勘違いで、削除しました。

すみません。関数名を呼び出し以外で、オブジェクトとして渡した事がかなったので、勘違いしてました。

投稿2015/11/18 01:04

編集2015/11/18 01:12
T.Kanno

総合スコア915

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

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

dialbird

2015/11/18 01:41

早速のご返答ありがとうございます! いいえ!アドバイスをしようとしてくださり、誠に助かります! また機会があれば是非ともお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問