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

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

ただいまの
回答率

90.51%

  • JavaScript

    19308questions

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

返り値について

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 791
退会済みユーザー

退会済みユーザー

『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に渡されるのでしょうか?

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

  1.  

イメージ説明

  1.  

イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+3

function dispMsg(str){
  document.write("<p>");
  document.write(str);
  document.write("</p>");
  var result = str + 'girl';
  return result;
}
dispMsg("Hello");
document.write("<p>Good morning</p>");
dispMsg("bye");


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

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

function dispMsg( str = "Hello" ){
  document.write("<p>");
  document.write("Hello");
  document.write("</p>");
  var result = "Hello" + 'girl';
  return result;
}
dispMsg("Hello");
document.write("<p>Good morning</p>");
dispMsg("bye");


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

function dispMsg( str = "Hello" ){
  undefined;
  document.write("Hello");
  document.write("</p>");
  var result = "Hello" + 'girl';
  return result;
}
dispMsg("Hello");
document.write("<p>Good morning</p>");
dispMsg("bye");


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

function dispMsg( str = "Hello" ){
  document.write("Hello");
  document.write("</p>");
  var result = "Hello" + 'girl';
  return result;
}
dispMsg("Hello");
document.write("<p>Good morning</p>");
dispMsg("bye");


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

function dispMsg( str = "Hello" ){
  undefined;
  document.write("</p>");
  var result = "Hello" + 'girl';
  return result;
}
dispMsg("Hello");
document.write("<p>Good morning</p>");
dispMsg("bye");


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

function dispMsg( str = "Hello" ){
  document.write("</p>");
  var result = "Hello" + 'girl';
  return result;
}
dispMsg("Hello");
document.write("<p>Good morning</p>");
dispMsg("bye");


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

function dispMsg( str = "Hello" ){
  undefined;
  var result = "Hello" + 'girl';
  return result;
}
dispMsg("Hello");
document.write("<p>Good morning</p>");
dispMsg("bye");


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

function dispMsg( str = "Hello" ){
  var result = "Hello" + 'girl';
  return result;
}
dispMsg("Hello");
document.write("<p>Good morning</p>");
dispMsg("bye");


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

function dispMsg( str = "Hello" ){
  var result = 'Hello girl';
  return result;
}
dispMsg("Hello");
document.write("<p>Good morning</p>");
dispMsg("bye");


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

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


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

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


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

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


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

undefined;
dispMsg("bye");


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

dispMsg("bye");


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

function dispMsg(str = "bye"){
  document.write("<p>");
  document.write("bye");
  document.write("</p>");
  var result = "bye" + 'girl';
  return result;
}
dispMsg("bye");


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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/24 20: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'を戻します。

    具体的にどこに戻すのでしょうか?

    キャンセル

  • 2016/12/25 13: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 14: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 14: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 16: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などでブラウザ上に表記する何かがあるということでよいでしょうか?

    キャンセル

  • 2016/12/26 17:44

    > 変数名をreturnに指定しないとすべての式の結果が、表記されてしまう

    これは違います。return しなければ関数は undefined を返します。

    > 何もブラウザ上に表記せず処理結果を放置するなら、返り値の記載自体が不要ということでよろしいでしょうか?

    ご質問を理解できているか分かりませんが、違うと思います。
    たとえば、この質問の dispMsg 関数は return 不要かと思います。

    > 出力とはalertやappendなどでブラウザ上に表記する何かがあるということでよいでしょうか?

    微妙な表現ですね…… なにかしらの誤解があるように思えます。

    キャンセル

  • 2016/12/26 18:20

    var result = str + ’girl’;
    return result;

    のreturn reseltは
    式で指定した変数に処理結果を戻すという意味は、教科書にも書いてあるのであっていそうですね。

    http://hakuhin.jp/js/develop.html
    表示テスト問文字列を表記するという意味で言っていそうですがね。
    出力はそのようないみではないのですか?

    キャンセル

  • 2016/12/26 18:42

    うーん……
    出力は基本的に副作用なので、出力の有無によって戻り値を返すかどうか決める、という表現は大変に違和感があるんですよね……

    「戻り値を使わないなら return を書かなくていい」という意味でしたら、その通りです。
    そして、この質問の dispMsg 関数は戻り値を使っていませんので、return 不要、ということです。

    キャンセル

  • 2016/12/26 18:53

    >>>

    return文の役割ですが、
    関数としての出力がなければこの一行は無くても良いです。
    その場合、

    var data = breadMachine(2, 5);

    をしても、dataには何も入りません。
    関数の中でreturnで定義されたもののみ出力されます。


    下記の回答者の方が上記のように言っていたので、returnは出力があるかないかで決まると思ったのですが、間違っているのですかね?

    undefinedがよく意味が分かりませんが、返り値はほぼすべての式にあって、
    その返り値を使う場合は必要で放置する場合は不要という考えでよいのですかね?
    またreturn 変数名 の変数名は返り値をどの変数に渡すかを指定しているというは正しいのですね。

    キャンセル

  • 2016/12/26 19:47

    この文脈での「関数としての出力」とは、alertやconsoleやHTMLのことではなくて、戻り値のことでしょう。
    「戻り値を使わないなら return を書かなくていい」という意味で間違いないと思います。

    > その返り値を使う場合は必要で放置する場合は不要という考えでよいのですかね?

    正しいと思います。

    > またreturn 変数名 の変数名は返り値をどの変数に渡すかを指定しているというは正しいのですね。

    間違っていると思います。「return 変数名 の変数名は返り値*に*どの変数*を*渡すかを指定している」が正しい。

    キャンセル

  • 2016/12/26 21: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が必要で、
    返り値で何もしない場合はつけり必要はないということですね。

    キャンセル

  • 2016/12/27 08:38

    はい、正しいご理解かと思います。

    キャンセル

  • 2016/12/27 08: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関数に渡すことになると思うのですが、うまくいきません。
    関数には渡せないのですかね?

    キャンセル

  • 2016/12/27 09:38

    横からですが
    > weight2関数に渡すことになる

    returnは渡す先を指定するのではないです。
    多分そこを根本的に勘違いしています。

    キャンセル

  • 2016/12/27 09:45

    return 関数名
    はないのですですね。

    retern 変数名
    は指定の変数に処理結果を渡すわけではないのですか?

    具体的にどういうことか教えてください。

    キャンセル

  • 2016/12/28 08:37

    つまりreturn resultとはresultという変数を返り値として返しなさいと返すものを指定しているということですか?
    式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。

    すると返す場所は、指定することはある意味できず必然的に関数を定義した、
    場所に渡す(返す)ということでよいでしょうか?

    上記のように言う方も出てきているのですが、
    return の式はどこに返すかの指定ではなく、変数の呼び出しに、何を返すか指定するということなのでしょうか?

    キャンセル

  • 2016/12/28 09:56

    そうですね。

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

    キャンセル

  • 2016/12/28 14:04

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

    キャンセル

+2

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

プログラムも一緒です。

//ここでは機械(関数)を作っていますので、稼働はしていません。
//引数は機械で言う原材料、この機械ではaとbという材料を使用します。
function breadMachine (a, b) {
    //ここでは実際原材料を駆使して結果を作るための過程を記述
    var result = a + b;

    //ここで製造結果を排出する
    return result;
}

//関数を定義してから、ようやく稼働(実行)できます
//ここではaに2,bに7という原材料を渡します
//そして生産されたものをdataという箱(変数)に入れます
var data = breadMachine(2, 7);

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/24 16:09

    関数
    function breadMachine (a, b) {
    //ここでは実際原材料を駆使して結果を作るための過程を記述
    var result = a + b;

    //ここで製造結果を排出する
    return result;
    }
    はパンを作る炊飯器のようなものでこれを買ったらパンが出るわけではないということですね。

    そして関数の中の式は
    //ここでは実際原材料を駆使して結果を作るための過程を記述
    var result = a + b;
    炊飯器のプログラム(こねて、熱くして、蒸す)のことなのですね。

    そして引数は、小麦,水などの原料を指定することで、


    返り値
    //ここで製造結果を排出する
    return result;
    は出来上がったパンが炊飯器からポンと出てくるイメージですかね?

    キャンセル

  • 2016/12/24 16:19

    本題の返り値ですが、

    >>>
    /関数を定義してから、ようやく稼働(実行)できます
    //ここではaに2,bに7という原材料を渡します
    //そして生産されたものをdataという箱(変数)に入れます
    var data = breadMachine(2, 7);


    var data = breadMachine炊飯器(小麦, 水);
    ここで水と小麦という引数を炊飯器メソッドに渡して、
    炊飯器と水などがdata変数の中に入れられる。

    キャンセル

  • 2016/12/24 16: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と認識しているのでしょうか?

    キャンセル

  • 2016/12/24 16:42

    >は出来上がったパンが炊飯器からポンと出てくるイメージですかね?

    そうです。厳密に言うとそもそも例えがおかしいですが、そのようなイメージです。

    >var data = breadMachine炊飯器(小麦, 水);
    >ここで水と小麦という引数を炊飯器メソッドに渡して、
    >炊飯器と水などがdata変数の中に入れられる。

    二行目まではあっていると思いますが、
    dataに入れられるのは結果のパンだけです。
    炊飯器(関数)や小麦など(引数)はdataには入りません。

    キャンセル

  • 2016/12/24 16:50 編集

    すみません、質問をもう少し明瞭にしていただけると幸いです。

    >もしかして間違っていてこちらが正しいですか?

    そうですね、その認識で正しいと思います。

    対応つけの解釈もその認識で大丈夫です。

    return文の役割ですが、
    関数としての出力がなければこの一行は無くても良いです。
    その場合、

    var data = breadMachine(2, 5);

    をしても、dataには何も入りません。
    関数の中でreturnで定義されたもののみ出力されます。

    また、これらの例えはあくまでもイメージとしてご理解いただければと思います。
    厳密な仕様の説明としては成り立たないです。

    キャンセル

  • 2016/12/24 19:00

    わかりにくくてすいませんでした。

    >>>
    var data = breadMachine炊飯器(小麦, 水);
    ここで水と小麦という引数を炊飯器メソッドに渡して、
    炊飯器と水などが入るのではなく、それらが炊飯器関数の中でパンになってから、パンとい結果のみがdata変数の中に入れられる。

    でよいですかね。



    >>>
    var data = breadMachine炊飯器(小麦, 水);
    ここで水と小麦という引数を炊飯器メソッドに渡して、
    炊飯器と水などが入るのではなく、それらが炊飯器関数の中でパンになってから、パンとい結果のみがdata変数の中に入れられる。


    >>>
    return文の役割ですが、
    関数としての出力がなければこの一行は無くても良いです。

    出力とは調べてみるとブラウザ上に、何か表示するものがある時、ということのようですね。
    return文はブラ宇アに表記するものがある場合のみ記載するということなのでしょうか?

    キャンセル

  • 2016/12/25 11:50

    return文の役割ですが、
    関数としての出力がなければこの一行は無くても良いです。
    その場合、

    var data = breadMachine(2, 5);

    をしても、dataには何も入りません。
    関数の中でreturnで定義されたもののみ出力されます。

    こちら以外はおかげさまでわかったのですが、やはりここのみわかりません。
    ここだけ教えてもらえますか?

    キャンセル

  • 2016/12/25 13: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/28 08:38

    つまりreturn resultとはresultという変数を返り値として返しなさいと返すものを指定しているということですか?
    式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。

    すると返す場所は、指定することはある意味できず必然的に関数を定義した、
    場所に渡す(返す)ということでよいでしょうか?

    上記のように言う方も出てきているのですが、
    return の式はどこに返すかの指定ではなく、変数の呼び出しに、何を返すか指定するということなのでしょうか?

    キャンセル

0

例えば

var answer = 4 + 2;


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

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

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

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


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

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

var answer = f();

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

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

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

f()は冒頭で

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


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

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


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

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

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


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

みたいに。

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


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/27 11:52

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

    キャンセル

  • 2016/12/27 12:07 編集

    質問の意味がわかりません
    というのも
    return result;
    と書かれていたら
    result「が」(なにかを)返すんじゃなくて
    (関数が自分の「結果として」)result「を」返すからです。

    (あと図の意味もわかりません。説明もなしに図を貼られても...)

    キャンセル

  • 2016/12/27 22:35

    つまりreturn resultとはresultという変数を返り値として返しなさいと返すものを指定しているということですか?
    式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。

    すると返す場所は、指定することはある意味できず必然的に関数を定義した、
    場所に渡す(返す)ということでよいでしょうか?

    キャンセル

  • 2016/12/28 08:53

    > resultという変数を返り値として返しなさいと返すものを指定している
    > 式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。

    はい

    > すると返す場所は、指定することはある意味できず必然的に関数を定義した、
    場所に渡す(返す)ということでよいでしょうか?

    いいえ、実行した場所です。

    キャンセル

  • 2016/12/28 14:10

    つまりreturn resultとはresultという変数を返り値として返しなさいと返すものを指定しているということですか?
    式はどこに返すか指定しているのではなく、何を返すか指定しているのですね。

    すると返す場所は、指定することはある意味できず必然的に関数を定義した、
    場所に渡す(返す)ということでよいでしょうか?

    return の式はどこに返すかの指定ではなく、変数の呼び出しに、何を返すか指定するということなのでしょうか?

    キャンセル

0

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • JavaScript

    19308questions

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