typeof foo
< p > 评估结果为'undefined'
。但是
typeof (function() { return foo; })()
抛出一个错误:
ReferenceError: foo is not defined
这打破了我对表达式可替代性的理解! 直到现在,我不知道有哪种情况下 foo
和 (function() { return foo; })()
不相同。
这是标准行为吗?如果是,引用ECMAScript标准的相关部分会很有帮助。
编辑:
另一个例子:
typeof (foo)
typeof (foo + 0)
我本以为 (foo)
和 (foo + 0)
都会报错。
但第一个没有错误,第二个有。
typeof foo
没有抛出ReferenceError
,但函数表达式可能是在return
语句上抛出错误,而不是在typeof
上。 - ajp15243typeof(1+1)
首先评估1+1
一样,我认为表达式foo
也会被评估,例如评估为2
或'hello world'
,并且该评估也会引发ReferenceError
。当然,事实并非如此。 - Paul Drapertypeof (1 + foobar) // => ReferenceError
。 - ajmtypeof
之前评估foo
。也就是说,例如,如果你说alert("test")
,表达式"test"
在调用alert
之前被评估,并且应该独立于alert
进行评估,即alert("test")
和someOtherFunction("test")
不应影响常量"test"
的值。如果这是真的,为什么typeof
不独立于上下文评估foo
呢? - soktinpkasync () => await x
和async () => () => await x
破坏了它。(或类似地(function*(){ yield x; })
vs.(function*(){ () => yield x; })
). - Sebastian Simon