【发布时间】:2012-09-08 09:53:55
【问题描述】:
如果我尝试执行一个脚本,其唯一的源代码行是一个对象:
{prop:'value'}
它解析得很好(在 V8 和 UglifyJS 中)。同样,我可以将一个字符串或数字单独作为源代码,并且不会报告语法错误。
然而,V8 和 UglifyJS 都在抱怨这个问题:
function(){}
我收到Uncaught SyntaxError: Unexpected token (。
当第一个示例中的对象正常时,为什么会中断?函数不只是javascript中的对象吗?
我意识到声明一个匿名函数而不执行它不会做任何事情;那不是问题。我想知道为什么会导致解析错误。
【问题讨论】:
-
因为声明函数遵循
function [name] () { [code] }规则,所以缺少函数名,所以实际的问题可能是:为什么在特殊情况下可以创建匿名函数? -
“匿名函数”更准确地说是没有可选名称的函数表达式(请参阅FunctionExpression)。
-
有趣的是只需添加一些操作符就可以了 :)
!function(){};+function(){};
标签: javascript parsing syntax grammar anonymous-function