🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

解決済

2回答

911閲覧

[JavaScript]引数の値を指定した際の即時関数をアロー関数で表したいのですが方法が解りません。

ZET

総合スコア17

JavaScript

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

0グッド

0クリップ

投稿2019/11/22 06:39

編集2019/11/22 07:18

アロー関数を使った即時関数

JavaScript

1let c = (function(a,b){ 2 return a + b; 3}());

これはアロー関数で表すと

JavaScript

1let c = ((a,b)=>(a + b)());

このようになることまで解りました。

しかし、次のような場合、3時間ほど調べましたが、
探し方が悪かったのか記述を見つけることが出来ませんでした。

即時関数で引数に予め値が与えられている例

JavaScript

1let d = (function(a,b){ 2 return a + b; 3}(1,2)); 4console.log(d); // 3

これをアロー関数で表すとどのようになるのでしょうか。

ちなみに、次のような場合では、Stringリテラルとして処理され

functionとして処理され(御指摘頂いた後に修正)

JavaScript

1let d = ((a,b)=>(a+b)(1,2)); 2console.log(d);

出力結果は、次の通りになりました。
(a,b)=>(a+b)(1,2) // typeof(d)=function

この出力結果が、期待する数値の「3」になるには、
アロー関数を使って表現するとどのようにしたらよいでしょうか。

御回答よろしくお願い申し上げます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

次のような場合では、Stringリテラルとして処理され

されません。これは、(a+b)という「関数」を、引数(1, 2)で呼び出してその結果を得る、という関数です。

関数呼び出しのカッコがそれとわかるように区切り位置を変えましょう。

javascript

1let d = ((a,b)=>(a+b))(1,2);

投稿2019/11/22 06:45

maisumakun

総合スコア145963

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

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

maisumakun

2019/11/22 06:46 編集

JavaScriptでは「+演算子が関数を返す」というシチュエーションはないのですが、それでもそういう解釈になってしまいます。
ZET

2019/11/22 07:09

厳しい御指摘ありがとうございます。即時関数もアロー関数も覚えたてなのですが、即時関数で推奨される()の位置を守っていたら、迷い込んでしまいました。 let d = ((a,b)=>(a+b)(1,2)); これで、出力されたdである(a,b)=>(a+b)(1,2)の型を調べるとfunctionだと解りました。 適当なことを書いてしまい、申し訳ありません。 以後、精進致します。どうもありがとうございました。
guest

0

そんなに難しく考えなくても

javascript

1let d = ((a,b)=>a+b)(1,2); 2console.log(d);

考え方:
本体は「(a,b)=>a+b」これをカッコで囲って、後ろにカッコで引数を指定

参考

同じ処理を繰り返すのであれば、引数を複数書かないでもできます

javascript

1let d = ((...a)=>a.reduce((x,y)=>x+y))(1,2,3,4); 2console.log(d); //10

投稿2019/11/22 06:47

編集2019/11/22 07:20
yambejp

総合スコア116661

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

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

ZET

2019/11/22 07:10

柔軟な思考が求められるとひしひしと感じました。 どうもありがとうございます。
ZET

2019/11/22 10:49

同じ解答を得るにしても解法が様々ある数学と同じで、 様々な表現方法があると知り、日々、勉強になります。 プログラミング言語って面白いと思います。 この度は誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問