How*_*ard 7 javascript syntax-error
我的问题是为什么跟随不正确
function hello () {
{}.toString();//Unexpected token .
}
Run Code Online (Sandbox Code Playgroud)
但是正确的return:
function hello () {
return {}.toString();
}
Run Code Online (Sandbox Code Playgroud)
不知道解析器如何为不正确的版本工作,被{}视为BlockStatement?如果是,那为什么呢?
感谢您的详细解释
不知道解析器如何为不正确的版本工作,{}被视为BlockStatement?
究竟.
...为什么?
纯粹是因为这就是语法的设计方式.{当解析器期望一个语句(它在那里)时,在启动一个块和启动一个对象初始值设定项之间是不明确的,所以语法说它开始一个块.因此,{启动一个块,}结束它,并且.没有意义,因为解析器期望一个语句(或}函数体的关闭).
但在第二个例子中.因为在{之后return,解析器期望一个表达式(而不是语句),所以{启动一个对象初始化器.
任何将解析器置于其期望表达式的状态的东西都会使它将其{视为对象初始化器的开头.在这种情况下通常使用括号:
function hello() {
({}).toString();
}
Run Code Online (Sandbox Code Playgroud)
当然,该功能没有做任何事情,因为你没有使用toString... 的结果
| 归档时间: |
|
| 查看次数: |
242 次 |
| 最近记录: |