定数の初期化の話

この辺こんな風に(キーワードは違うにせよ)書ける言語もあるんだけど、JS はダメなのよね。

1
2
3
4
5
6
7
8
const x;
if (cond) {
    // 一回だけ代入可
    x = hoge;
} else {
    x = fuga;
}
// x が初期化されていないパスがある状態でここで x を使うとエラー

たしかに。
上記しかなかったら、こういう風に書くよね:

1
const x = cond ? hoge : fuga;

Scheme だとこういう風に書ける:

1
2
3
(define-constant x (if *cond*
                       hoge
                     fuga))

あんまり変わらないけど…。

えーと

よく見ると、定数の初期化の話ではない……?

つまり、const は変数への 1 回だけの代入を許すみたいなものがある言語もあるけれども、JavaScript では最初に代入しないと Syntax Error になってしまう。 みたいなことか。

こういうエラーが出た:

$ deno run ./demo000.js
error: Uncaught SyntaxError: Missing initializer in const declaration
const x;
    ^
    at <anonymous> (file:///D:/home/rihine/workspace/2020-09-30/demo000.js:1:7)