日期:2014-05-16  浏览次数:20415 次

js的“语句优先”作怪
function(){}() //匿名函数立即执行, 语法分析期报错
{}.constructor //获取对象直接量的构造器,语法分析期报错

为什么呢:
{}有三种意思:
1 语句块
2 函数
3 对象字面量
语句块这个含义是最优先的

解决办法 :
1. 添加个变量接收
var c = {}.constructor;  不会报错
var fn = function(){}(),也不会报错。

2.利用()强制实现
(function(){})(),(function(){});//强制其理解为函数(语义3 ),“函数()”表示执行该函数,即声明后立即执行了。
({}).constructor //({})强制把大括号理解成对象直接量(语义2 ),“对象.xx”表示获取对象的成员,自然后面的点运算符可以正常执行了。