我的问题是为什么跟随不正确
function hello () {
{}.toString();//Unexpected token .
}
但使用return
更正:
function hello () {
return {}.toString();
}
不知道解析器如何适用于不正确的版本,{}
被视为BlockStatement
?如果是,那么为什么?
感谢您详细解释
答案 0 :(得分:8)
不知道解析器如何为不正确的版本工作,{}被视为BlockStatement?
完全。
...为什么?
纯粹是因为这就是语法的设计方式。当解析器期望一个语句(it is there)时,{
在启动一个块和启动一个对象初始值设定项之间是不明确的,所以语法说它开始一个块。因此,{
开始一个块,}
结束它,.
没有意义,因为解析器期待一个语句(或结束}
功能体)。
但是在第二个例子中。因为{
在return
之后,解析器是expecting an expression(不是语句),所以{
启动对象初始值设定项。
任何将解析器置于其期望表达式的状态的东西都会使它将{
视为对象初始值设定项的开头。在这种情况下通常使用括号:
function hello() {
({}).toString();
}
当然,该功能无法执行任何操作,因为您未使用toString
的结果......