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

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

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

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

Q&A

解決済

3回答

1227閲覧

JavaScript「関数に戻り値が指定されていない場合、undefinedとなる」について

susumu-99

総合スコア44

JavaScript

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

0グッド

0クリップ

投稿2021/12/28 05:48

お世話になります。

JavaScriptの値が'undefined'となる場合に、関数に戻り値が指定されていない場合というのがありますが、いまいち分からない部分があるので質問させてください。

質問は以下の通りです。

//1
function hello(){
console.log('hello');
}

hello();
//これは普通にconsoleに'hello'と表示されるのは分かります。

//2
function hello(){
console.log('hello');
}

console.log(hello());
//これは、関数に戻り値が指定されていない場合として'hello undefined'と表示されるのも分かりました。

//3
function hello(){
const a = console.log('hello');
return a;
}

console.log(hello());
//これは2の関数に'return a'を、返り値として設定しました。
//しかしながら、これも'hello undefined'となります。
//この'undefined'は関数に返り値があるのに、なぜでてくるのでしょうか?

分かる方、ご教授よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

console.logは戻り値が指定されていない関数であるため、
const a = console.log('hello');において、aundefinedになります。

したがって、

js

1//3 2function hello(){ 3 const a = console.log('hello'); 4 return a; 5}

では、undefinedであるareturnしているので、helloの戻り値はundefinedです。

投稿2021/12/28 07:30

編集2021/12/28 07:38
ozwk

総合スコア13521

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

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

susumu-99

2021/12/28 07:41

なるほど!分かった気がします。 回答ありがとうございました。 少しだけ質問重ねさせてください。 ’console.log’は関数なんですか?
ozwk

2021/12/28 07:43

はい
susumu-99

2021/12/28 07:47

そうなんですね。 関数といえば、関数式や関数宣言、またはアロー関数のようなものをいうと思っていたもので、 「関数に戻り値が指定されていない場合、undefinedとなる」という根拠で説明ができるということなんですね。 ありがとうございました。
susumu-99

2021/12/28 08:02

教えていただいたリンクにconsole.logが’undefined’になるって書いていましたね。 重ねがさねありがとうございました。
guest

0

const a = console.log('hello');

まずconsole.logが実行されてhelloが表示されます
console.logは戻り値をもたないのでaにはundefinedが返ります

return a;

hello()がundefinedを返します

普通にやるならこうです。

javascript

1function hello(){ 2const a = 'hello'; 3return a; 4} 5console.log(hello());

投稿2021/12/28 05:52

編集2021/12/28 06:17
yambejp

総合スコア114784

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

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

susumu-99

2021/12/28 06:16

回答ありがとうございます。 回答を読ませてもらい、関数内の'return'の前に’console.log(a)’を付け加えてaが'undefined'となっていることが確認できました。 なんとなくは分かるのですが、回答内の「console.logは戻り値をもたない」の箇所をもう少し詳しく教えていただくことは可能でしょうか。
yambejp

2021/12/28 06:20 編集

> console.logは戻り値をもたない console.log(console.log(1)); とすると、まず内側のconsole.logが1を表示し つづいて外側のconsole.logがundefindを返します console.log(void(0)); がundefindを表示するのと同じロジックです
susumu-99

2021/12/28 06:40

難しいですね。 なんとなく分かる範囲を超えることができませんが、今はconsole.log(console.log(1));が'1 undefined'となることを覚えておきます。ご丁寧にありがとうございます。 voidは強制的に'undefined'を表示するのだと思っていました。 回答を見て、voidは存在しないオブジェクトの添え字’0’だから’undefined’になっているのかなと今思いました。
guest

0

JavaScript

1function f1(){ 2 return undefined; 3}; 4console.log(f1());

の結果は納得いきますか?いきませんか?
納得いかない場合は、どう表示されたら納得いきますか?

投稿2021/12/28 06:51

otn

総合スコア84505

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

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

susumu-99

2021/12/28 06:58

回答ありがとうございます。 これはコンソールに'undefined'と表示されるであってますか? (理由:f1の関数が実行され、その返り値が'undefined'だから) どうでしょうか。
otn

2021/12/28 07:06

それが納得できるなら、 function hello(){ const a = console.log('hello'); return a; } console.log(hello()); がundefinedと表示するのも納得できるはずです。
susumu-99

2021/12/28 07:22

この場合、'a'が’undefined’だからコンソールに'undefined'と表示されるのは分かります。 しかしながら、'const a = console.log('hello');'の部分で、なぜ'a'が’undefined’となるのかの理由がはっきり分からないと思ったのですが (他の方の回答をいただいている中の「console.logは戻り値をもたないのでaにはundefinedが返ります」の部分に当たります。)
otn

2021/12/28 07:27

const a=f1(); で、a が undefined になるのはわかりますか?
susumu-99

2021/12/28 07:36

今ちょっとピンと来てないのですが、これは ’const a=f1();’を単体で考えて、aが'undefined'になるということでしょうか。 または、 ’function hello(){ const a = console.log('hello'); return a; } console.log(hello());’ このソースにおいて’const a=f1();’が’undefined’になるということでしょうか?
otn

2021/12/28 07:46

通じなかったようなので、全体を書くと、 function f1() { return undefined; }; const a = f1(); console.log(a); でundefinedが表示されることが納得できるかという質問です。
susumu-99

2021/12/28 07:55

function f1() { return undefined; }; const a = f1(); //ここで関数f1()が実行されるので’undefined’が返ってくる。 console.log(a); //ここで返ってきた’undefined’をコンソールに書き出すというのであれば分かります。
otn

2021/12/28 08:01

それが納得できて、 conost a = console.log(~~); でaにundefinedが代入されるのが納得できないというのは、上記と何が違うと思ってのことでしょうか?
susumu-99

2021/12/28 08:20

私としては、言い方を変えると、 ’return undefined’ではなく’return console.log('hello');’とならない理由が分からなかったのですが、 他の方の回答で、JavaScriptの仕様ということが分かりました。 私の説明が行き届いていなかったため、お手数をおかけしました。 回答いただけたことは大変感謝しています。ありがとうございました。 またよろしくお願いします。
otn

2021/12/28 14:39 編集

なんと!! console.logが関数であると言うことがわかってなかったと言うことなのですね。 そこまでは想像が及びませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問