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

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

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

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

Q&A

解決済

2回答

217閲覧

JavaScriptの奇妙な構文について質問です

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2017/09/02 18:14

現在Reactのチュートリアルのtic-tac-toe gameの最後の練習問題をやっている途中です。
自分で色々考えてみた後に答えを探してみるとここにありました。
https://codepen.io/m0neysha/pen/PWJyEx?editors=0010

その練習問題の4つ目に
4. Add a toggle button that lets you sort the moves in either ascending or descending order.
というのがありその部分のコードが上のリンクの162行目にあるのですが、これがよくわかりませんでした。

javascript

1{(() => this.state.ascending === true? <ol>{moves}</ol> : <ol>{moves.reverse()}</ol>) ()}

this.state.ascendingがtrueのときは<ol>{move}</ol>を返せ、
this.state.ascendingがfalseのときは<ol>{move.reverse()}</ol>を返せとこの行で行いたい目的はわかるのですが、構文の意味がわかりません。
特に最後に()が付されているのが理解できません。

恐らくアロー関数に関することだと思いこのサイトを参照してみると以下のように書いてありました。

var a = b = c = d = e = f = g = h = 5

var fn = a => b = c => d = e = f => g => h
console.log(fn()()()())
console.log(a,b,c,d,e,f,g,h)

これに従うと関数宣言を行い、その後関数を実行する時にその関数が入れ子になっていれば「()」が必要となるというふうに取れるのですが、問題のコードは実行時に急に「()」が付いています。

es6に詳しくないのでどういったキーワードで検索すれば求めていることを知れるのかわからず困っています。
簡単な例を提示して解説して頂けるとうれしいです。
よろしくお願いします。

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

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

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

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

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

kei344

2017/09/03 06:44

まだ質問が「受付中」になっていますが、一旦「解決済」にされてはいかがでしょうか。
guest

回答2

0

JavaScript

1{(/*関数*/)()} //こうなっているだけでは。 2 3// こういう構文と同じ 4let test = (function(){return 'text'})(); // 'text' が変数testに入る 5 6/* 関数部分を冗長に書くなら */ 7() => { return this.state.ascending === true? <ol>{moves}</ol> : <ol>{moves.reverse()}</ol>; }

【アロー関数 - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/arrow_functions

投稿2017/09/02 18:36

kei344

総合スコア69398

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

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

0

ベストアンサー

render() { const renderSomething = () => { return this.state.ascending ? <ol>{moves}</ol> : <ol>{moves.reverse()}</ol> } return ( {renderSomething()} ) }

やってることはこれと同じです。無名関数を即時関数として実行しているので、読みなれないと読みづらいだけで。

投稿2017/09/03 04:38

編集2017/09/03 06:46
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/09/03 05:54

回答ありがとうございました! 僕が検索をかけるべきキーワードは「アロー関数」ではなく「即時関数」でした。 即時関数のことを知らなかったので混乱したみたいです。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問