该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-08
|
|
返回顶楼 | |
发表时间:2010-07-02
正在被function(){}()纠结
function(){}()//报错 void function(){}()//不会报错 var fn=function(){}()//不会报错 |
|
返回顶楼 | |
发表时间:2011-02-06
整个是个赋值语句,其中的{name:'jack',age:23}是个表达式,单独存在也不会出现语法错误的。
====“单独存在”的说法是有问题的,应该说需要表达式出现的地方,这个对象直接量都可以放在这个地方,不会出现语法错误,但是可能出现运行时错误,比如"delete {};" function(){}(),大括号被理解成复合语句,自然前面的function()声明函数的语法不完整导致语法分析期出错。 ====理解错误,应该是"function(){}"被解析为一个函数声明,然后重新进入语句解析状态,便无法继续解析后面的"()"了,导致语法分析报错。 {}.constructor,大括号被理解成复合语句,大括号后面是点运算符,点运算符前没有合理的对象自然也报错 ====理解不完全正确,"{}"被解析为复合语句没错,然后"."被解析成点运算符和后面的都错了。复合语句之后,重新进入语句解析状态(如你所说的"语句优先"),"."不可能作为点运算符作为语句的开始,实际上是作为没有整数部分的Number的小数点而解析了,继续解析遇到非数字的字母c(constructor的第一个字母),然后报错。可以测试"{}.123;"是没有问题的。 |
|
返回顶楼 | |
发表时间:2011-02-07
最后修改:2011-02-09
谢谢wmingjian。
1,整个是个赋值语句,其中的{name:'jack',age:23}是个表达式,单独存在也不会出现语法错误的。 已修改 2,function(){}(),大括号被理解成复合语句,自然前面的function()声明函数的语法不完整导致语法分析期出错。 你认为"function(){}"被解析为一个函数声明,既然是函数声明后面的()是函数调用理应不会报错。事实却报错。为何? 或者有无其它方式来证明。 3,{}.constructor,大括号被理解成复合语句,大括号后面是点运算符,点运算符前没有合理的对象自然也报错 完全认同您的观点。 测试{}.123的确没问题。 {}.123等价于 {} .123 等价于 {} 0.123 |
|
返回顶楼 | |
发表时间:2011-02-08
总有那么不知道的,今天学习了!
|
|
返回顶楼 | |
发表时间:2011-02-10
这种文章不错,,平时就是表面东西,,里面还真没看多少~~~
|
|
返回顶楼 | |