関数を定義するためのconstの適切な使用 質問する

関数を定義するためのconstの適切な使用 質問する

constJavaScript、特に関数で設定できる値の種類に制限はありますか? これは有効ですか? 確かに機能しますが、何らかの理由で悪い習慣と見なされますか?

const doSomething = () => {
   ...
}

ES6 ではすべての関数をこのように定義する必要がありますか? もしそうなら、これは普及していないようです。

ベストアンサー1

これまでのやり方に問題はありませんが、関数宣言と関数式の違いを覚えておく必要があります。

関数宣言、つまり:

function doSomething () {}

完全にスコープの最上部に引き上げられます (同様にletconstブロック スコープも適用されます)。

つまり、次のことが機能します。

doSomething() // works!
function doSomething() {}

関数式、つまり:

[const | let | var] = function () {} (or () =>

匿名関数 ( ) の作成function () {}と変数の作成、そしてその匿名関数をその変数に代入することです。

したがって、スコープ内での変数の巻き上げに関する通常のルール、つまりブロックスコープの変数 (letおよび) は、ブロックスコープの最上部についてはconst巻き上げられません。undefined

これはつまり:

if (true) {
    doSomething() // will fail
    const doSomething = function () {}
}

が定義されていないため失敗しますdoSomething。( がスローされますReferenceError)

に切り替えると、var変数の巻き上げが行われますが、 に初期化されるため、上記のコード ブロックは依然として機能しません。(呼び出し時に は関数ではないため、がundefinedスローされます)TypeErrordoSomething

標準的な慣行として、作業には常に適切なツールを使用する必要があります。

Axel Rauschmayer は、es6 セマンティクスを含むスコープとホイスティングに関する素晴らしい記事を書いています。ES6 における変数とスコープ

おすすめ記事