huangyunbin 发表于 2013-1-29 08:59:24

js的“语句优先”作怪

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

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

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

2.利用()强制实现
(function(){})(),(function(){});//强制其理解为函数(语义3 ),“函数()”表示执行该函数,即声明后立即执行了。
({}).constructor //({})强制把大括号理解成对象直接量(语义2 ),“对象.xx”表示获取对象的成员,自然后面的点运算符可以正常执行了。
页: [1]
查看完整版本: js的“语句优先”作怪