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

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

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

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

Q&A

解決済

4回答

2118閲覧

返り値について

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

1クリップ

投稿2016/12/24 04:03

編集2016/12/27 02:48

『return result;』について

下記例でいうならば、関数が実行、呼び出された所に、処理結果が戻る、移動するので、下記例の場合sum(1,2);/に移動する。
つまり、var answerの中に入る。

<script> function sum(a,b){ var result = a + b; return result; } var answer = sum(1,2);//引数をスコープの外に記載し、わざわざ関数SUMに引数を渡さないといけない console.log(answer);//定義した関数の呼び出しをしないと定義した関数が実行できない。 </script>

という認識でよろしいでしょうか。
関数が呼び出されたところに処理結果が戻るという部分が抽象的ではっきりとしません。

いつもすいませんがよろしくお願い致します。

ちょっとうまく伝えられていないので別の例を追記します。
関数、引数の一連の処理。

function dispMsg(str){ document.write("<p>");2番目に実行、4番目に実行、5番目に実行 document.write(str); document.write("</p>"); var result = str + ’girl’; return result; }

1番目に実行dispMsg("Hello");関数の呼び出し1
3番目に実行 document.write("<p>Good morning</p>");関数の呼び出しではない
4番目に実行 dispMsg("bye");関数の呼び出し2

スクリプトは記述された順に上から下へ実行されていきますが、関数内に記述された処理は関数が呼び出されるまで実行されません。
つまりfunction dispMsgはいきなり実行されない。

そして関数呼び出しが行われるといったん、function dispMsg に値が移動し、
function dispMsg 関数内の処理を実行した後で、
関数呼び出しの次の行(document.write("<p>Good morning</p>"); )へ再度処理が移ります。

引数Helloはfunction dispMsg 関数に渡され、
function dispMsg(’Hello ’)となる。
そして、 document.write(str);とdocument.write(str);の引数が同じなので、
(’Hello ’)は、document.write(str);に渡され、
document.write('Hellow');となり、
結果的に、HellowとPタグの 間に記載される。

よって引数は同じ値名の所に渡されていくということになる。

var result = str + ’girl’;
return result;
の部分は、
まずhellowgirlになってresult変数に渡される。
次にreturn hellowgirlとなり、
hellowgirlが返り値として、function dispMsgに渡されるのでしょうか?

やっぱり返り値がよくわかりせん。

イメージ説明

イメージ説明

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

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

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

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

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

guest

回答4

0

ベストアンサー

javascript

1function dispMsg(str){ 2 document.write("<p>"); 3 document.write(str); 4 document.write("</p>"); 5 var result = str + 'girl'; 6 return result; 7} 8dispMsg("Hello"); 9document.write("<p>Good morning</p>"); 10dispMsg("bye");

誤解を恐れずに言えば、戻り値とは「関数呼び出しの部分が差し替わる値」です。

仮想的なコードで書いて、動作を追ってみましょう。
まず、dispMsg("Hello");でdispMsgに引数"Hello"を持って処理が移動します。

javascript

1function dispMsg( str = "Hello" ){ 2 document.write("<p>"); 3 document.write("Hello"); 4 document.write("</p>"); 5 var result = "Hello" + 'girl'; 6 return result; 7} 8dispMsg("Hello"); 9document.write("<p>Good morning</p>"); 10dispMsg("bye");

次に、document.write関数が実行され、DOMに<p>が書き出され、戻り値undefinedが戻ります。
先ほど書いた通り、戻り値とは「関数呼び出しの部分が差し替わる値」ですので、document.write("<p>");がundefinedに差し替わります。

javascript

1function dispMsg( str = "Hello" ){ 2 undefined; 3 document.write("Hello"); 4 document.write("</p>"); 5 var result = "Hello" + 'girl'; 6 return result; 7} 8dispMsg("Hello"); 9document.write("<p>Good morning</p>"); 10dispMsg("bye");

undefinedが評価され(なにも起きない)、次の行に処理が移ります。

javascript

1function dispMsg( str = "Hello" ){ 2 document.write("Hello"); 3 document.write("</p>"); 4 var result = "Hello" + 'girl'; 5 return result; 6} 7dispMsg("Hello"); 8document.write("<p>Good morning</p>"); 9dispMsg("bye");

前行と同様に、DOMに"Hello"が書き出され、戻り値undefinedが戻ります。

javascript

1function dispMsg( str = "Hello" ){ 2 undefined; 3 document.write("</p>"); 4 var result = "Hello" + 'girl'; 5 return result; 6} 7dispMsg("Hello"); 8document.write("<p>Good morning</p>"); 9dispMsg("bye");

undefinedが評価され(なにも起きない)、次の行に処理が移ります。

javascript

1function dispMsg( str = "Hello" ){ 2 document.write("</p>"); 3 var result = "Hello" + 'girl'; 4 return result; 5} 6dispMsg("Hello"); 7document.write("<p>Good morning</p>"); 8dispMsg("bye");

前行と同様に、DOMに"</p>"が書き出され、戻り値undefinedが戻ります。

javascript

1function dispMsg( str = "Hello" ){ 2 undefined; 3 var result = "Hello" + 'girl'; 4 return result; 5} 6dispMsg("Hello"); 7document.write("<p>Good morning</p>"); 8dispMsg("bye");

undefinedが評価され(なにも起きない)、次の行に処理が移ります。

javascript

1function dispMsg( str = "Hello" ){ 2 var result = "Hello" + 'girl'; 3 return result; 4} 5dispMsg("Hello"); 6document.write("<p>Good morning</p>"); 7dispMsg("bye");

"Hello" + 'girl' が評価され、'Hello girl'になります。

javascript

1function dispMsg( str = "Hello" ){ 2 var result = 'Hello girl'; 3 return result; 4} 5dispMsg("Hello"); 6document.write("<p>Good morning</p>"); 7dispMsg("bye");

var result = 'Hello girl';が評価され、ローカル変数resultに代入されます。

javascript

1function dispMsg( str = "Hello" ){ 2 return 'Hello girl'; 3} 4dispMsg("Hello"); 5document.write("<p>Good morning</p>"); 6dispMsg("bye");

return 'Hello girl';が評価され、dispMsg("Hello")の戻り値として'Hello girl'を戻します。

javascript

1'Hello girl'; 2document.write("<p>Good morning</p>"); 3dispMsg("bye");

'Hello girl';が評価され(なにも起きない)、次の行に処理が移ります。

javascript

1document.write("<p>Good morning</p>"); 2dispMsg("bye");

同様に、DOMに"<p>Good morning</p>"が書き出され、戻り値undefinedが戻ります。

javascript

1undefined; 2dispMsg("bye");

undefinedが評価され(なにも起きない)、次の行に処理が移ります。

javascript

1dispMsg("bye");

dispMsg("Hello");が評価され、dispMsgに引数"bye"を持って処理が移動します。

javascript

1function dispMsg(str = "bye"){ 2 document.write("<p>"); 3 document.write("bye"); 4 document.write("</p>"); 5 var result = "bye" + 'girl'; 6 return result; 7} 8dispMsg("bye");

もう、省略していいですよね?

最終的に、このプログラムの評価値は、'bye girl'です。
戻り値とは「関数呼び出しの部分が差し替わる値」ということ、感覚的にご理解いただけましたか?

投稿2016/12/24 08:03

Lhankor_Mhy

総合スコア35860

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

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

退会済みユーザー

退会済みユーザー

2016/12/24 11:43

詳細なお話大変ありがとうございます。 戻り値とは「関数呼び出しの部分が差し替わる値」です。 難しい日本語ですね。 関数呼び出しの部分 dispMsg("Hello"); や dispMsg("bye"); が 指し変わる値??? >>> 誤解を恐れずに言えば、戻り値とは「関数呼び出しの部分が差し替わる値」です。 dispMsg("Hello"); が差し替わる値ということですか? >>> まず、dispMsg("Hello");でdispMsgに引数"Hello"を持って処理が移動します。 dispMsg("Hello"); が function dispMsg( str = "Hello" )に移動するということでしょうか? >>> undefinedが評価され(なにも起きない)、次の行に処理が移ります。 処理してpタグの開始タグを書いたが、返り値などがない場合はそうなるということですか? "Hello" + 'girl' が評価され、'Hello girl'になります。 は処理結果があるのでundefinedにならないということでしょうか? >>> return 'Hello girl';が評価され、dispMsg("Hello")の戻り値として'Hello girl'を戻します。 具体的にどこに戻すのでしょうか?
Lhankor_Mhy

2016/12/25 04:31

> 具体的にどこに戻すのでしょうか? 回答の疑似コードを見てください。 dispMsg("Hello"); document.write("<p>Good morning</p>"); dispMsg("bye"); ↓ 'Hello girl'; document.write("<p>Good morning</p>"); dispMsg("bye"); ここに戻します。 たとえば。 x = 2 * ( 3 + 4 ) という式は計算の途中で ( 3 + 4 ) を 7 に差し替えて、 x = 2 * 7 と書けると思います。 これと似ていますね。
退会済みユーザー

退会済みユーザー

2016/12/25 05:18

自分で調べた結果下記のように考えたのですが正しいでしょうか? ・その『関数』が呼び出された場所まで処理が戻ります。 下記の例ならvar answerの中身のsum(1,2);に処理結果が入る。つまり、var answer=3となる 例 <script> function sum(a,b){ var result = a + b; return result; } var answer = sum(1,2);//引数をスコープの外に記載し、わざわざ関数SUMに引数を渡さないといけない console.log(answer);//定義した関数の呼び出しをしないと定義した関数が実行できない。 </script> ・関数を呼び出した部分に、返り値は渡されるので、dispMsg("Hello");に渡され、 渡された関数を呼び出した部分が、処理結果'Hello girl';に変化するということでよさそうですね。 dispMsg("Hello");=>'Hello girl'; ということですね。
退会済みユーザー

退会済みユーザー

2016/12/25 05:26

・例 function dispMsg(str = "bye"){ document.write("<p>"); document.write("bye"); document.write("</p>"); var result = "bye" + 'girl'; return result; } dispMsg("bye"); その後の表記 関数自体を引数に入れる。 alert(dispMsg("bye")); 一度変数に入れても良い。 var message = dispMsg("bye"); alert(message ); 上記でうまくいきました。ありがとうございます。
退会済みユーザー

退会済みユーザー

2016/12/26 07:08

その後 var result = str + ’girl’; return result; のようになぜ、返り値にはresultという式を指定する必要がある時とないときがあるのか疑問に思ったのですが、これは document.write("<p>"); document.write("bye"); document.write("</p>"); var result = "bye" + 'girl'; return result; のように関数の中に複数式がある場合、 変数名をreturnに指定しないとすべての式の結果が、表記されてしまうので、 result変数内の式の結果だけブラウザ上に表記したい時に指定をするということでしょうか? またそもそもすべて表記するはいしは、何もブラウザ上に表記せず処理結果を放置するなら、返り値の記載自体が不要ということでよろしいでしょうか? 出力しなけれが返り値は不要と聞いたのですが、出力とはalertやappendなどでブラウザ上に表記する何かがあるということでよいでしょうか?
Lhankor_Mhy

2016/12/26 08:44

> 変数名をreturnに指定しないとすべての式の結果が、表記されてしまう これは違います。return しなければ関数は undefined を返します。 > 何もブラウザ上に表記せず処理結果を放置するなら、返り値の記載自体が不要ということでよろしいでしょうか? ご質問を理解できているか分かりませんが、違うと思います。 たとえば、この質問の dispMsg 関数は return 不要かと思います。 > 出力とはalertやappendなどでブラウザ上に表記する何かがあるということでよいでしょうか? 微妙な表現ですね…… なにかしらの誤解があるように思えます。
退会済みユーザー

退会済みユーザー

2016/12/26 09:20

var result = str + ’girl’; return result; のreturn reseltは 式で指定した変数に処理結果を戻すという意味は、教科書にも書いてあるのであっていそうですね。 http://hakuhin.jp/js/develop.html 表示テスト問文字列を表記するという意味で言っていそうですがね。 出力はそのようないみではないのですか?
Lhankor_Mhy

2016/12/26 09:42

うーん…… 出力は基本的に副作用なので、出力の有無によって戻り値を返すかどうか決める、という表現は大変に違和感があるんですよね…… 「戻り値を使わないなら return を書かなくていい」という意味でしたら、その通りです。 そして、この質問の dispMsg 関数は戻り値を使っていませんので、return 不要、ということです。
退会済みユーザー

退会済みユーザー

2016/12/26 09:53

>>> return文の役割ですが、 関数としての出力がなければこの一行は無くても良いです。 その場合、 var data = breadMachine(2, 5); をしても、dataには何も入りません。 関数の中でreturnで定義されたもののみ出力されます。 下記の回答者の方が上記のように言っていたので、returnは出力があるかないかで決まると思ったのですが、間違っているのですかね? undefinedがよく意味が分かりませんが、返り値はほぼすべての式にあって、 その返り値を使う場合は必要で放置する場合は不要という考えでよいのですかね? またreturn 変数名 の変数名は返り値をどの変数に渡すかを指定しているというは正しいのですね。
Lhankor_Mhy

2016/12/26 10:47

この文脈での「関数としての出力」とは、alertやconsoleやHTMLのことではなくて、戻り値のことでしょう。 「戻り値を使わないなら return を書かなくていい」という意味で間違いないと思います。 > その返り値を使う場合は必要で放置する場合は不要という考えでよいのですかね? 正しいと思います。 > またreturn 変数名 の変数名は返り値をどの変数に渡すかを指定しているというは正しいのですね。 間違っていると思います。「return 変数名 の変数名は返り値*に*どの変数*を*渡すかを指定している」が正しい。
退会済みユーザー

退会済みユーザー

2016/12/26 12:56

ありがとうございます。 >>> 「戻り値を使わないなら return を書かなくていい」という意味で間違いないと思います。 ブラウザ上に表記をしなければではなく、 ブラウザ上に返り値を表記したり、返り値を使って計算を行ったりしない場合は必要ないということですね。 >>> 間違っていると思います。「return 変数名 の変数名は返り値*に*どの変数*を*渡すかを指定している」が正しい。 function dispMsg(str = "bye"){ document.write("<p>"); document.write("bye"); document.write("</p>"); var result = "bye" + 'girl'; return result; } dispMsg("bye"); 上記で言うと、returnに"bye" + 'girl'に渡すという意味なのですね。 私はreturnがvar resultに渡すことだと思っていましたが、違うのですね。 >>> その返り値を使う場合 おそらく、ブラウザ上に返り値を表記したり、返り値を使って計算を行ったりするときはreturnが必要で、 返り値で何もしない場合はつけり必要はないということですね。
Lhankor_Mhy

2016/12/26 23:38

はい、正しいご理解かと思います。
退会済みユーザー

退会済みユーザー

2016/12/26 23:55

ありがとうございました。 >>> function weight2() { const daikunn = 98; const dai = 78; const kunn = 58; if((78 <= daikunn) && (58 < dai)) { $('.js-test1').append('<p>bozuuuuu</p>'); } else { $('.js-test1').append('<p>bozu</p>'); } return weight2; }; weight2(); alert(); 上記ならweight2関数に渡すことになると思うのですが、うまくいきません。 関数には渡せないのですかね?
ozwk

2016/12/27 00:38

横からですが > weight2関数に渡すことになる returnは渡す先を指定するのではないです。 多分そこを根本的に勘違いしています。
退会済みユーザー

退会済みユーザー

2016/12/27 00:45

return 関数名 はないのですですね。 retern 変数名 は指定の変数に処理結果を渡すわけではないのですか? 具体的にどういうことか教えてください。
退会済みユーザー

退会済みユーザー

2016/12/27 23:37

つまりreturn resultとはresultという変数を返り値として返しなさいと返すものを指定しているということですか? 式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。 すると返す場所は、指定することはある意味できず必然的に関数を定義した、 場所に渡す(返す)ということでよいでしょうか? 上記のように言う方も出てきているのですが、 return の式はどこに返すかの指定ではなく、変数の呼び出しに、何を返すか指定するということなのでしょうか?
Lhankor_Mhy

2016/12/28 00:56

そうですね。 数学はお得意ですか? あれでも関数という概念が出てきたと思うのですが、基本的には同じものです。 戻り値とは、変数をある値に確定させた時に関数がとる値、だと思えば分かりやすいかもしれないです。
退会済みユーザー

退会済みユーザー

2016/12/28 05:04

ありがとうございました。
guest

0

人間は同じような行程を何度も行うときに「ツール」のようなものを使いますね。
例えばですが、パン工場を想像してみてください。
「粉を混ぜる→捏ねる→整形する→焼く→包装する」のような、
決まったことを行うために、人間はそのルールに従う機械を作ります。
しかし機械を作っただけでは稼働していないのです。
原料を入れて、稼働させることでパンは出来上がります。

プログラムも一緒です。

javascript

1//ここでは機械(関数)を作っていますので、稼働はしていません。 2//引数は機械で言う原材料、この機械ではaとbという材料を使用します。 3function breadMachine (a, b) { 4 //ここでは実際原材料を駆使して結果を作るための過程を記述 5 var result = a + b; 6 7 //ここで製造結果を排出する 8 return result; 9} 10 11//関数を定義してから、ようやく稼働(実行)できます 12//ここではaに2,bに7という原材料を渡します 13//そして生産されたものをdataという箱(変数)に入れます 14var data = breadMachine(2, 7);

関数の定義はあくまでも作っているだけなので、
実行は使うときと考えていただければと思います。
これが複数重なっていても規則は同じで、
上から順に実行していくだけです。

お力になれれば幸いです。

投稿2016/12/24 06:52

編集2016/12/24 06:53
Everatch

総合スコア241

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

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

退会済みユーザー

退会済みユーザー

2016/12/24 07:09

関数 function breadMachine (a, b) { //ここでは実際原材料を駆使して結果を作るための過程を記述 var result = a + b; //ここで製造結果を排出する return result; } はパンを作る炊飯器のようなものでこれを買ったらパンが出るわけではないということですね。 そして関数の中の式は //ここでは実際原材料を駆使して結果を作るための過程を記述 var result = a + b; 炊飯器のプログラム(こねて、熱くして、蒸す)のことなのですね。 そして引数は、小麦,水などの原料を指定することで、 返り値 //ここで製造結果を排出する return result; は出来上がったパンが炊飯器からポンと出てくるイメージですかね?
退会済みユーザー

退会済みユーザー

2016/12/24 07:19

本題の返り値ですが、 >>> /関数を定義してから、ようやく稼働(実行)できます //ここではaに2,bに7という原材料を渡します //そして生産されたものをdataという箱(変数)に入れます var data = breadMachine(2, 7); var data = breadMachine炊飯器(小麦, 水); ここで水と小麦という引数を炊飯器メソッドに渡して、 炊飯器と水などがdata変数の中に入れられる。
退会済みユーザー

退会済みユーザー

2016/12/24 07:39

もしかして間違っていてこちらが正しいですか? >>> var data = breadMachine炊飯器(小麦, 水); ここで水と小麦という引数を炊飯器メソッドに渡して、 炊飯器と水などがdata変数の中に入れられる。 var data = breadMachine炊飯器(小麦, 水); ここで水と小麦という引数を炊飯器メソッドに渡して、 炊飯器という関数のスイッチを入れる。 var result = a + b;が実行される パンがresultに入る。 //ここで製造結果を排出する return result; は何をしているのでしょうか?パンを breadMachine炊飯器に渡す役割ですか? 炊飯器と水などがdata変数の中に入れられる。 出来上がったパンが下記に戻ってきてdataという袋に入れて完成。 var data = breadMachine(2, 7); 最後に var data = breadMachine(2, 7); function breadMachine (a, b) var result = a + b; の対応つけはどう解釈しているのでしょうか? var data = breadMachine(2, 7); function breadMachine (a, b) で第一引数が2とaなのでa=2、7とbが台に引数なのでb=7と認識しているのでしょうか?
Everatch

2016/12/24 07:42

>は出来上がったパンが炊飯器からポンと出てくるイメージですかね? そうです。厳密に言うとそもそも例えがおかしいですが、そのようなイメージです。 >var data = breadMachine炊飯器(小麦, 水); >ここで水と小麦という引数を炊飯器メソッドに渡して、 >炊飯器と水などがdata変数の中に入れられる。 二行目まではあっていると思いますが、 dataに入れられるのは結果のパンだけです。 炊飯器(関数)や小麦など(引数)はdataには入りません。
Everatch

2016/12/24 07:51 編集

すみません、質問をもう少し明瞭にしていただけると幸いです。 >もしかして間違っていてこちらが正しいですか? そうですね、その認識で正しいと思います。 対応つけの解釈もその認識で大丈夫です。 return文の役割ですが、 関数としての出力がなければこの一行は無くても良いです。 その場合、 var data = breadMachine(2, 5); をしても、dataには何も入りません。 関数の中でreturnで定義されたもののみ出力されます。 また、これらの例えはあくまでもイメージとしてご理解いただければと思います。 厳密な仕様の説明としては成り立たないです。
退会済みユーザー

退会済みユーザー

2016/12/24 10:00

わかりにくくてすいませんでした。 >>> var data = breadMachine炊飯器(小麦, 水); ここで水と小麦という引数を炊飯器メソッドに渡して、 炊飯器と水などが入るのではなく、それらが炊飯器関数の中でパンになってから、パンとい結果のみがdata変数の中に入れられる。 でよいですかね。 >>> var data = breadMachine炊飯器(小麦, 水); ここで水と小麦という引数を炊飯器メソッドに渡して、 炊飯器と水などが入るのではなく、それらが炊飯器関数の中でパンになってから、パンとい結果のみがdata変数の中に入れられる。 >>> return文の役割ですが、 関数としての出力がなければこの一行は無くても良いです。 出力とは調べてみるとブラウザ上に、何か表示するものがある時、ということのようですね。 return文はブラ宇アに表記するものがある場合のみ記載するということなのでしょうか?
退会済みユーザー

退会済みユーザー

2016/12/25 02:50

return文の役割ですが、 関数としての出力がなければこの一行は無くても良いです。 その場合、 var data = breadMachine(2, 5); をしても、dataには何も入りません。 関数の中でreturnで定義されたもののみ出力されます。 こちら以外はおかげさまでわかったのですが、やはりここのみわかりません。 ここだけ教えてもらえますか?
退会済みユーザー

退会済みユーザー

2016/12/25 04:13

自分で調べた結果下記のように考えたのですが正しいでしょうか? ・その『関数』が呼び出された場所まで処理が戻ります。 下記の例ならvar answerの中身のsum(1,2);に処理結果が入る。つまり、var answer=3となる 例 <script> function sum(a,b){ var result = a + b; return result; } var answer = sum(1,2);//引数をスコープの外に記載し、わざわざ関数SUMに引数を渡さないといけない console.log(answer);//定義した関数の呼び出しをしないと定義した関数が実行できない。 </script>
退会済みユーザー

退会済みユーザー

2016/12/27 23:38

つまりreturn resultとはresultという変数を返り値として返しなさいと返すものを指定しているということですか? 式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。 すると返す場所は、指定することはある意味できず必然的に関数を定義した、 場所に渡す(返す)ということでよいでしょうか? 上記のように言う方も出てきているのですが、 return の式はどこに返すかの指定ではなく、変数の呼び出しに、何を返すか指定するということなのでしょうか?
guest

0

(コメントに書こうと思って間違えました)

投稿2016/12/27 23:52

編集2016/12/27 23:53
ozwk

総合スコア13512

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

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

0

例えば

javascript

1var answer = 4 + 2;

これが実行されたらanswer6が入ることは大丈夫だと思います。
じゃあこのとき何が起きているかですが、

  1. 変数answerを用意する。
  2. 4 + 2を実行(評価)する
  3. answer4 + 2 を実行した「結果」を代入する。

4 + 2 を実行した「結果」というのは、6になるので、
answer6が入ります。

この例だと代入されるのは4 + 2を実行した「結果」でしたが、
関数呼び出しでも同じです。


では関数を使ってみます:

javascript

1function f(){ 2 return "nice text."; 3} 4 5var answer = f();

var answer = f();
は、4 + 2の例と同様に、

  1. 変数answerを用意する。
  2. f()を実行する
  3. answerf() を実行した「結果」を代入する。

じゃあ
f() を実行した「結果」
って何だよって話ですが、
それを指定しているのがreturn文です。

f()は冒頭で

javascript

1function f(){ 2 return "nice text."; 3}

と「定義」されています。
この「定義」の中で、
return "nice text."
つまり、「関数fを実行した「結果」は"nice text."にしてね」と「宣言」しているわけです。

よってこの例だと、
answer"nice text."が入ります。


そしてあなたが大変混乱している「返す」と言う表現は
「これを実行した「結果」は
です」ということです。

例えば
4 + 2を実行すると6を「返し」ます

javascript

1function f(){ 2 return "nice text."; 3}

と定義される関数fを実行する:f()"nice text."を「返し」ます。

みたいに。

そしてこの「返った」(戻った)値が「返り値」(戻り値)です。


※初心者用に正確でない表現を使っています。

投稿2016/12/27 01:50

編集2016/12/27 02:07
ozwk

総合スコア13512

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

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

退会済みユーザー

退会済みユーザー

2016/12/27 02:52

図を挿入したのですが、ruturn resultのresultはどこに変数を返すのでしょうか? (なぜか下の画像を2.としたのですが1.に変更されています。)
ozwk

2016/12/27 03:11 編集

質問の意味がわかりません というのも return result; と書かれていたら result「が」(なにかを)返すんじゃなくて (関数が自分の「結果として」)result「を」返すからです。 (あと図の意味もわかりません。説明もなしに図を貼られても...)
退会済みユーザー

退会済みユーザー

2016/12/27 13:35

つまりreturn resultとはresultという変数を返り値として返しなさいと返すものを指定しているということですか? 式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。 すると返す場所は、指定することはある意味できず必然的に関数を定義した、 場所に渡す(返す)ということでよいでしょうか?
ozwk

2016/12/27 23:53

> resultという変数を返り値として返しなさいと返すものを指定している > 式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。 はい > すると返す場所は、指定することはある意味できず必然的に関数を定義した、 場所に渡す(返す)ということでよいでしょうか? いいえ、実行した場所です。
退会済みユーザー

退会済みユーザー

2016/12/28 05:10

つまりreturn resultとはresultという変数を返り値として返しなさいと返すものを指定しているということですか? 式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。 すると返す場所は、指定することはある意味できず必然的に関数を定義した、 場所に渡す(返す)ということでよいでしょうか? return の式はどこに返すかの指定ではなく、変数の呼び出しに、何を返すか指定するということなのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問