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

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

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

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

Q&A

解決済

3回答

390閲覧

即時関数 戻り値 呼び出し元

..o

総合スコア28

JavaScript

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

1グッド

1クリップ

投稿2020/08/04 01:38

前提

お世話になっております。
即時関数について勉強進めており、その上で詳しい挙動、イメージについて
調べてもあまりピンとこなかった為、質問させていただきます。

javascript

1let c = (function(d){ 2 console.log("called" + d); 3 return 0; 4 5})(10); 6 7console.log(c); 8

質問

関数ではreturn文を使うことで呼び出し元に値を返すと学んだのですが、
このコードで呼び出し元というのは、(10);という認識で合っていますか?

私が学んでいるコースではcの事を呼び出し元と言っていたのですが、

そもそもの私の理解では

関数実行される() = 呼び出し元
という認識だったのですが、

cが呼び出し元ということになるのでしょうか?

それとも()の呼び出し元に返った値(戻り値)が結果的にcに格納される為、
呼び出し元がcであるとも言える、という感じなのでしょうか?

miyabi_pudding👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

個人的には、「呼び出し元」というのはarguments.callerのこと、という認識なので、このコードの呼び出し元はコードの中に書かれていない、と思います。


プログラミング用語で「評価」という言葉がありまして、大雑把に言うとこれは「式」を「値」に変換する、というものです。
関数呼び出しは、関数呼び出しの「式」が「評価」されて戻り値という「値」に変換される、と理解していいと思います。

ですので、

js

1let c = (function(d){ 2 console.log("called" + d); 3 return 0; 4 5})(10);

↑は、関数呼び出し部分が評価された時点で、

js

1let c = 0;

↑に変換される、と考えていいです。

投稿2020/08/04 02:32

編集2020/08/04 02:34
Lhankor_Mhy

総合スコア36960

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

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

..o

2020/08/04 02:45

ご回答ありがとうございます。 そもそも呼び出し元という理解が間違っていたようでお恥ずかしい限りです。 評価という考えでスッキリしました。 今後そのように考えていきます。ありがとうございました!
guest

0

このコードで呼び出し元というのは、(10);という認識で合っていますか?

違います。「私の理解」が根本的に間違っています。

foo()のような関数呼び出しは式となりますが、その式が(あえて呼ぶとすれば)呼び出し元です。この考え方でいきますと、「cが呼び出し元」ということになります。

(「呼び出し元」という用語はこの用法が定着している用語ではなく、たとえば関数aの内部で関数bを呼び出した場合に、aを「呼び出し元」と呼ぶことも行われます)

投稿2020/08/04 01:43

maisumakun

総合スコア146018

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

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

..o

2020/08/04 02:09

ご回答ありがとうございます。 function a{ return A; } var c = a();//あえて言うならa()が呼び出し元(戻り値が返る場所)結果的にcに戻り値が入る 質問の記載したコードは無名関数である為cが戻り値が返る場所になる ということでしょうか..?
guest

0

感覚の問題だと思うんですけどね・・・順をおって書きます

投稿2020/08/04 02:21

yambejp

総合スコア116724

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

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

yambejp

2020/08/04 02:23

const a = d=>(console.log("called" + d),1); console.log("start"); console.log(a(10)); 出力:start → called10 → 1 :start出力後にaが実行されるから
yambejp

2020/08/04 02:24

おなじaを再利用して const a = d=>(console.log("called" + d),1); const b = (x=>a(x))(20); console.log("start"); console.log(b); 出力:called10 → start → 1 :aが実行されてからstartが出力されるから
yambejp

2020/08/04 02:26 編集

上記をまとめて無名関数に置き換えると const c = (d=>(console.log("called" + d),1))(10); console.log("start"); console.log(c); 出力:called10 → start → 1 :コールバック関数が実行されてからstartが出力されるから
..o

2020/08/04 02:35

ご回答ありがとうございます。 挙動についての解説もありがとうございます! 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問