私の理解では、var キーワードを使用せずに変数を定義すると、この変数をウィンドウ オブジェクトに追加するだけと評価されます。一方、まだ定義されていないオブジェクトのメンバーにアクセスしようとすると、未定義と評価されます。だから私はこのようなことをすることができます:
> foo = "bar";
"bar"
> window.foo;
"bar"
> window.bar;
undefined
直接アクセスすると、未定義の変数値 (未定義) を取得できないのはなぜですか?
> bar;
ReferenceError: bar is not defined
私がよく理解していない別のことがありますが、関連していると思われます。コンソールにいくつかのリテラルを入力すると、常にそれ自体が評価されます。1 は 1 に評価され、[1] は [1] に評価されます。関数には値のような性質があるため(一級市民であるため)、関数はリテラルでもあると常に考えていました。しかし、無名関数を評価しようとすると、構文エラーが発生します。
> function() {}
SyntaxError: Unexpected token (
名前付き関数を定義できることは知っていますが、それは未定義と評価されます (関数自体ではなく、どこかで関数を定義します)。では、なぜ関数はリテラルではないのでしょうか?
ありがとう