アプリ版:「スタンプのみでお礼する」機能のリリースについて

例えば、通常の関数が次のように定義されていた場合、
アロー関数で表しても一番外側にある括弧は同じ位置ではありません。
即時関数:
(function func(){
 関数処理;
}());
即時関数(アロー関数で表した場合):
(func=>(...関数処理...)());

しかし、引数指定がある即時関数の場合は、
let c = (function func(a,b){
 return a+b;
}(1.3));
console.log(c); // 出力値 4
大外の括弧の位置を遵守してアロー関数で表すと、関数そのものが出力されてしまいます。
let c = (func =(a,b)=>(a+b)(1,3));
// 出力値は、(a,b)=>(a+b)(1,3)となり関数を返してきます。

アロー関数で具体的な値を予め設定された引数を持つ即時関数をアロー関数で表すには、
let c = (func =(a,b)=>(a+b))(1,3); // 出力値 4
上記のように括弧の位置を変更する必要があります。

これはECMAScript推奨の即時関数の大外の括弧の位置と異なります。

ECMAScriptと異なる方法を取る必要性があったのか、
この理由を御存知の方がいらっしゃいましたら、御回答頂けますでしょうか。

アロー関数の仕様と言われれば、それまでですが、納得がいかないのです。
即時関数:
(function func(){
 関数処理;
})();
これでも正しく動作するからいいのではないかというのは、
正しい記法とは異なるので無しでお願いします。
どうぞよろしくお願い申し上げます。

A 回答 (3件)

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


>// 出力値は、(a,b)=>(a+b)(1,3)となり関数を返してきます。

これは当然こうなるよね。
(a+b)を関数として引数(1,3)で呼び出す式に
解釈するのが自然。

関数リテラルは}で終わるから無名関数の終端が明確だが
アロー関数はそうは行きません。

(a+b)の所で関数が終端しているとするのは
どう考えても変態だと思います。


>(function func(){
> 関数処理;
>})();
>これでも正しく動作するからいいのではないかというのは、
>正しい記法とは異なるので無しでお願いします。

これは完璧に正しい記法。これを正しくないとする根拠は????
極普通に使われていますよ。
    • good
    • 0

ちなみにあえてpromise処理をするならこう



let c = (async(a,b)=>(a+b))(1,3);
c.then(console.log);
    • good
    • 0

なにか勘違いしてませんか?



let c = ((a,b)=>(a+b))(1,3);
console.log(c);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!