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

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

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

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

Q&A

解決済

3回答

822閲覧

即時関数 出力 挙動 javascript

..o

総合スコア28

JavaScript

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

0グッド

0クリップ

投稿2020/08/03 06:31

編集2020/08/03 07:36

前提

お世話になっております。
即時関数につい勉強を進めているのですが、下記コードがどういった流れで出力されているのかです。

javascript

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

console

1called10 20

質問

consoleに出力される内容ですが
called10はあくまで関数が実行されただけであるためcalled10と出力され、
0は戻り値として変数Cに入っている0が出力されている(関数を実行する記述ではない為、シンプルに戻り値が出力されている)という理解で大丈夫でしょうか?

returnの記述を消したところ、undefinedが出力されました。変数に関数を代入している場合、未定義ということになるのでしょうか?

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

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

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

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

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

guest

回答3

0

ベストアンサー

0は戻り値として変数Cに入っている0が出力されている(関数を実行する記述ではない為、シンプルに戻り値が出力されている)という理解で大丈夫でしょうか?

少し違いますね。関数全体を括弧で括り、最後に引数(10)を渡しているので、ここで関数を実行しています
そしてその戻り値である、return 0の0がcに代入されている、という感じです。

returnの記述を消したところ、undefinedが出力されました。変数に関数を代入している場合、未定義ということになるのでしょうか?

この場合変数に代入しているのは戻り値ですね

function func(d){ console.log("called" + d); return 0; }; let c = func(10); console.log(c);

と同じ動作になります。
なので、returnが無い場合は値を何も返さないので、cには「まだ何も代入されていない」という意味の「undefined」となります。

ちなみに変数に関数を代入したい場合は、最後の(10)を消して

let c = (function(d){ console.log("called" + d); return 0; }); console.log(c);

とする事で代入できます。この場合は、console.log(c);の箇所で関数が出力されます。(この場合は関数を実行している箇所がないので、console.log("called" + d);は実行されません)

投稿2020/08/03 07:07

yuuyu

総合スコア1139

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

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

..o

2020/08/03 07:26

ご回答ありがとうございます! なるほど、関数実行が行われた為戻り値が代入されconsole.log(c)で出力できるのですね。考え方が違いました。 例文もとても分かりやすく理解できました、助かりました..! ありがとうございます。
..o

2020/08/03 07:54

加えて質問失礼いたします。 質問に記載したコードの戻り値の呼び出し元(戻る場所)というのは(10);でしょうか? お答えいただけますと幸いです。
yuuyu

2020/08/03 08:08

特にそこまで詳しいことを考えたことが無かったので、もしかしたら誤った回答になるかもしれないことをご了承ください。 下記サイトにも記載されているように、「(function(d){ ... })(10)」は、最初の()でグループ化、2つ目の括弧で解釈実行を行うようなので、これ全体が置き換わる、という感じなのかもしれません。 https://developer.mozilla.org/ja/docs/Glossary/IIFE 最初の括弧が「グループ化演算子」という括弧で、計算する際に例えば「(3 + 4) * 2」となった時に、内部的に「7 * 2」という感じになるのと同じで括弧内が置き換わるのとほぼ同じだと思われます。
..o

2020/08/03 08:40

ありがとうございます! 参考にいたします!
guest

0

まず、無名関数が定義されそれが即時関数で実行されています
console.logでその時点で表示
戻り値が0なのでcには0が入ります。
console.log(c)とすれば0が表示されますが、その記載がないですね?

投稿2020/08/03 07:06

yambejp

総合スコア114987

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

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

..o

2020/08/03 07:11

ご回答ありがとうございます! console.log(c)は最後の行に記載しているのですが、どこの部分のことでしょうか? 噛み合ってなかったら申し訳ありません。
guest

0

変数に関数を代入している場合、未定義ということになるのでしょうか?

let 変数 = 関数(10);としているので代入されているのは関数ではなく関数の戻り値です。

投稿2020/08/03 07:06

kei344

総合スコア69458

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

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

..o

2020/08/03 07:17

代入されているのはあくまで戻り値なのですね。 ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問