『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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア35869
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総合スコア241
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/12/24 07:19
退会済みユーザー
2016/12/24 07:39
2016/12/24 07:42
2016/12/24 07:51 編集
退会済みユーザー
2016/12/24 10:00
退会済みユーザー
2016/12/25 02:50
退会済みユーザー
2016/12/25 04:13
退会済みユーザー
2016/12/27 23:38
0
(コメントに書こうと思って間違えました)
投稿2016/12/27 23:52
編集2016/12/27 23:53総合スコア13512
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
例えば
javascript
1var answer = 4 + 2;
これが実行されたらanswer
に6
が入ることは大丈夫だと思います。
じゃあこのとき何が起きているかですが、
- 変数
answer
を用意する。 4 + 2
を実行(評価)するanswer
に4 + 2
を実行した「結果」を代入する。
4 + 2
を実行した「結果」というのは、6
になるので、
answer
に6
が入ります。
この例だと代入されるのは4 + 2
を実行した「結果」でしたが、
関数呼び出しでも同じです。
では関数を使ってみます:
javascript
1function f(){ 2 return "nice text."; 3} 4 5var answer = f();
var answer = f();
は、4 + 2
の例と同様に、
- 変数
answer
を用意する。 f()
を実行するanswer
にf()
を実行した「結果」を代入する。
じゃあ
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総合スコア13512
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/12/27 02:52
2016/12/27 03:11 編集
退会済みユーザー
2016/12/27 13:35
2016/12/27 23:53
退会済みユーザー
2016/12/28 05:10
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/12/24 11:43
2016/12/25 04:31
退会済みユーザー
2016/12/25 05:18
退会済みユーザー
2016/12/25 05:26
退会済みユーザー
2016/12/26 07:08
2016/12/26 08:44
退会済みユーザー
2016/12/26 09:20
2016/12/26 09:42
退会済みユーザー
2016/12/26 09:53
2016/12/26 10:47
退会済みユーザー
2016/12/26 12:56
2016/12/26 23:38
退会済みユーザー
2016/12/26 23:55
2016/12/27 00:38
退会済みユーザー
2016/12/27 00:45
退会済みユーザー
2016/12/27 23:37
2016/12/28 00:56
退会済みユーザー
2016/12/28 05:04