1. ホーム
  2. ジャバスクリプト

[解決済み】関数定義のためのconstの正しい使い方

2022-03-31 22:21:04

質問

を使用して設定できる値の種類に制限はありますか? const JavaScript の、特に関数について教えてください。これは有効なのでしょうか?確かに動作はしますが、何らかの理由でバッドプラクティスとみなされるのでしょうか?

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

ES6では、すべての関数をこのように定義すべきなのでしょうか?もしそうなら、これが浸透していないような気がします。

どうすればいい?

やったことは問題ないのですが、関数宣言と関数式の違いを覚えておく必要があります。

関数宣言、ということです。

function doSomething () {}

は完全にスコープの先頭に吊り上げられます (そして letconst もブロックスコープされています)。

つまり、以下のようにするとうまくいきます。

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

関数式、ということです。

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

無名関数の作成ですか( function () {} ) を作成し、変数を作成し、その変数にその無名関数を代入する。

つまり、スコープ内の変数のホイストに関する通常のルール -- ブロックスコープの変数( letconst として吊り上げない。 undefined をブロックスコープの先頭に置く。

ということになります。

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

のため、失敗します。 doSomething が定義されていない。(これは ReferenceError )

を使用するように変更した場合 var に初期化され、変数のホスティングが行われます。 undefined そのため、上記のコードのブロックはまだ動作しません。 (この場合 TypeError というのは doSomething は呼び出した時点では関数ではありません)

標準的な慣行としては、常に仕事に適したツールを使用することです。

Axel Rauschmayerがes6のセマンティクスを含むスコープとホイスティングについて素晴らしい投稿をしています。 ES6における変数とスコープ