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

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

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

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

Q&A

解決済

3回答

591閲覧

Javascript (ES6) 引数について

mamesora

総合スコア16

JavaScript

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

0グッド

0クリップ

投稿2020/06/21 03:19

編集2020/06/21 05:11

js初学者です
引数で躓きました。
テキストではこう書いてあります。▽

const sample = (greeting,weather)=>{ console.log(`鈴木さん${greeting}${weather}`); } sample("おはようございます!","いい天気ですね!");

出力されると▽
鈴木さんおはようございます!いい天気ですね!

となります。

疑問に思ったことがあります。
何故、関数sample内で定義せず、
関数sample中括弧{}の外にわざわざsampleを呼び出して、
${greeting}${weather}の中身を
sample("おはようございます!","いい天気ですね!");と
定義してるのにしっかり出力されるんですか?
自分は実験で試しに
sample("おはようございます!","いい天気ですね!");を
関数sample中括弧{}内に収めたり
色々試しましたがエラーやしっかりと出力されませんでした。
なんでこんなわかり難い構成なんでしょうか?

追記です。
上手く行かなかったコードです。

コード1▽ const sample = (greeting,weather)=>{ console.log(`鈴木さん${greeting}${weather}`); sample("おはようございます!","いい天気ですね!"); } コード2▽ const sample = (greeting,weather)=>{ console.log(`おはようございます!${greeting}`); console.log(`いい天気ですね!${weather}`); } console.log(`鈴木さん${greeting}${weather}`);

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

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

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

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

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

miyabi_takatsuk

2020/06/21 03:34

もしかして、引数に対しての質問というよりは、 テンプレートリテラルの話だったりしませんか? うまくいかなかったコードの方も記載いただくと、 解決に直結する回答を得られやすくなるかと思います。
mamesora

2020/06/21 04:47

上手く行かなかったコード1▽ const sample = (greeting,weather)=>{ console.log(`鈴木さん${greeting}${weather}`); sample("おはようございます!","いい天気ですね!"); } コード2▽ const sample = (greeting,weather)=>{ console.log(`おはようございます!${greeting}`); console.log(`いい天気ですね!${weather}`); } console.log(`鈴木さん${greeting}${weather}`); です。 宜しくお願いします。
miyabi_takatsuk

2020/06/21 04:57

そのコードを、質問本文に記載してください。
mamesora

2020/06/21 05:12

更新しました。
guest

回答3

0

実引数と仮引数

何故、関数sample内で定義せず、
関数sample中括弧{}の外にわざわざsampleを呼び出して、
${greeting}${weather}の中身を
sample("おはようございます!","いい天気ですね!");と
定義してるのにしっかり出力されるんですか?

実引数から仮引数に値が渡される仕様」だからです。

JavaScript

1function sample (arg1, arg2) { 2 console.log(arg1, arg2); // "Hello" "World" 3} 4 5var str1 = 'Hello', str2 = 'World'; 6 7console.log(str1, str2); // "Hello" "World" 8sample(str1, str2);

ReferenceError

言い換えるなら、仮引数「greeting」と仮引数「weather」が定義されているからです。
JavaScriptでは、未定義の変数参照時に ReferenceError が発生し、コードは実行されません。

JavaScript

1foo; // ReferenceError: foo is not defined

ReferenceError が発生していないのなら、その変数は定義されているという事です。

Re: mamesora さん

投稿2020/06/21 03:37

編集2020/06/21 04:09
think49

総合スコア18189

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

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

mamesora

2020/06/21 06:43

すみません。 もう少し先に進んでから質問するべきでした。 今渡されてるテキストを全部見て基本を一周してわからなかったら また、質問してみようとおもいます。 ありがとうございました。
guest

0

何故、関数sample内で定義せず、

関数sample中括弧{}の外にわざわざsampleを呼び出して、

関数は、基本的にほかから呼び出すために定義するものです。中から呼び出すこと(再帰呼び出し)も可能ですが、それは特殊な使い方に属します。

投稿2020/06/21 03:23

maisumakun

総合スコア146018

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

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

maisumakun

2020/06/21 03:27

「何度も呼び出す」「非同期的に呼び出す」「複雑な処理を切り分ける」などの場面では、関数のメリットが目立ってきます(あるいは、関数を定義しないと書けません)。 今回の例は、あくまで「関数はこういうものですよ」という見本で、「やりたいこと以上に複雑になっている」のは間違いないです。
mamesora

2020/06/21 06:46

今進めてるテキストがありまして この次にスコープというのがあってもしかしたらこの先にヒントがあるかもしれないのでまたわからなかったら質問してみようと思います。 ありがとうございました。
guest

0

ベストアンサー

引数に関しては、他の回答者の方の回答にありますので、
なぜ質問者さんの書いたコードの後者がエラーなどが発生しているのか、を回答いたします。

javascript

1const sample = (greeting,weather)=>{ 2 3 console.log(`鈴木さん${greeting}${weather}`); 4 sample("おはようございます!","いい天気ですね!"); 5} 6 7sample("おはようございます!","いい天気ですね!");

これは、無限ループになるからです。
ある関数の中で、自身を再び呼び出すことを、再帰処理といいますが、
だいたいは、どれだけの深さの処理になるかわからない時に、条件付きで行います。
しかし、このコードでは、再帰させる条件が無く、再帰実行してるため、一度実行すると、際限なく自身を実行し続けるため、無限ループになり、RunTime Errorなどが起きます。

javascript

1const sample = (greeting,weather)=>{ 2 console.log(`おはようございます!${greeting}`); 3 console.log(`いい天気ですね!${weather}`); 4} 5console.log(`鈴木さん${greeting}${weather}`);

これに関しては、think49さんの回答にも関わってきますが、
greetingweather変数が定義されていない(参照範囲外)箇所で使用しようとしているためです。
変数の参照範囲に関しては、用語も含めて、とても重要になるため、よくよく勉強されるといいかと思います。

投稿2020/06/21 05:10

編集2020/06/21 05:14
miyabi_takatsuk

総合スコア9555

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

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

mamesora

2020/06/21 06:40

わかりました。 一度基礎をやり終えてわからなかったらまた質問させて頂きます 参照範囲について勉強してみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問