为什么匿名函数本身就是javascript中的语法错误
Why is an anonymous function on its own a syntax error in javascript?
如果我试图执行一个脚本,该脚本的唯一源行是对象:
{prop:'value'}
它解析得很好(在V8和UglifyJS中)。类似地,我可以将字符串或数字单独作为源代码,并且没有语法错误报告。
然而,V8和UglifyJS都抱怨这一点:
function(){}
我得到Uncaught SyntaxError: Unexpected token (
。
当第一个例子中的对象很好时,为什么会中断?函数不就是javascript中的对象吗?
我意识到在不执行匿名函数的情况下声明它不会有任何作用;这不是问题所在。我想知道为什么它会导致解析错误。
根据ECMAScript规范,关于表达式语句的第12.4节:
请注意,ExpressionStatement不能以大括号开头,因为这可能会使其与块不明确。此外,ExpressionStatement不能以
function
关键字开头,因为这可能会使其与FunctionDeclaration不明确。
尽管函数只是对象,但请记住,您可以单独声明函数,而无需在表达式中真正使用它们的对象。这就是模棱两可的地方。当然,你永远不能单独声明匿名函数(因为你无论如何都无法引用它),但由于我在规范中找不到任何区分匿名函数和命名函数声明的东西,我怀疑这两者都适用。
为了解决歧义,您需要将其括在括号中,因此它将始终被视为一个表达式:
(function(){})
{prop:'value'}
没有被解析为对象,只是被解析为一个块,它有一个标签prop
。
您需要()
将其括起来,以便将其解析为表达式。
CCD_ 6将被解析为对象表达式。
CCD_ 7将被解析为函数表达式。
相关文章:
- Javascript语法向设置发出sessionStorage值
- 函数的Javascript语法
- 如何定义const函数javascript(语法糖)
- Onclick不会启动..可能存在javascript语法问题
- 用jquery替换javascript语法
- 在Javascript语法中:和::和:::有什么区别
- 如何以编程方式查找javascript语法错误的位置
- 这个javascript语法有什么问题
- Chrome 中的 JSX/JavaScript 语法
- Javascript语法 - 我做错了什么
- 用于指定元素 ID 的正确 JavaScript 语法是什么
- 这是什么JavaScript语法
- 带有函数的 JavaScript 语法
- 剃刀中的javascript语法错误
- 解析云代码geoPoint查询Javascript语法
- 在Notepad++中更好地突出显示Javascript语法
- 通用Javascript语法查询
- Joomla2.5框架似乎干扰了javascript语法
- 点击切换Divs/JavaScript语法
- 用于将变量传递给函数的javascript语法