在我的理解中,定义一个没有 var 关键字的变量只是评估将此变量添加到窗口对象。另一方面,试图访问尚未定义的对象的成员,结果为未定义。所以我可以做这样的事情:
> foo = "bar";
"bar"
> window.foo;
"bar"
> window.bar;
undefined
为什么直接访问时无法获得未定义的变量值(未定义)?
> bar;
ReferenceError: bar is not defined
还有一件事我不太明白,我认为这可能是相关的。当我在控制台中输入一些文字时,它们总是对自己进行评估。1 计算为 1,[1] 计算为 [1],依此类推。我一直认为函数也是字面量,因为它具有一些类似价值的品质(成为一等公民)。但是当我尝试评估一个匿名函数时,我得到一个语法错误。
> function() {}
SyntaxError: Unexpected token (
我知道我可以定义一个命名函数,但计算结果为未定义(它在某处定义函数而不是它本身)。那么为什么不是函数字面量呢?
谢谢