const
JavaScript、特に関数で設定できる値の種類に制限はありますか? これは有効ですか? 確かに機能しますが、何らかの理由で悪い習慣と見なされますか?
const doSomething = () => {
...
}
ES6 ではすべての関数をこのように定義する必要がありますか? もしそうなら、これは普及していないようです。
ベストアンサー1
これまでのやり方に問題はありませんが、関数宣言と関数式の違いを覚えておく必要があります。
関数宣言、つまり:
function doSomething () {}
完全にスコープの最上部に引き上げられます (同様にlet
、const
ブロック スコープも適用されます)。
つまり、次のことが機能します。
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
スローされます)TypeError
doSomething
標準的な慣行として、作業には常に適切なツールを使用する必要があります。
Axel Rauschmayer は、es6 セマンティクスを含むスコープとホイスティングに関する素晴らしい記事を書いています。ES6 における変数とスコープ