foo; // ReferenceError: foo is not defined
typeof(foo); // undefined
typeof
在提供未声明的变量标识符时如何规避ReferenceError
?这只是JavaScript解释器" magic"还是可以用用户土地概念来解释?
答案 0 :(得分:7)
不,这在用户土地概念中无法解释 - 它是魔法"魔法"如果你愿意的话。
EcmaScript使用Reference specification type来解释这样的情况。这些引用用于描述赋值的语义,method calls,eval
等等。通常,会调用GetValue algorithm来取消引用它们(例如,在表达式语句的求值中),并且当引用无法解析时,这会抛出ReferenceError
。
相比之下,typeof
operator不仅仅是GetValue,还有一个特殊情况来处理这些未声明的变量引用:
- 醇>
如果
Type(val)
是参考,那么一个。如果
IsUnresolvableReference(val)
为true
,请返回"undefined"
。