六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 22|回复: 0

js的“语句优先”作怪

[复制链接]

升级  42.05%

599

主题

599

主题

599

主题

探花

Rank: 6Rank: 6

积分
1841
 楼主| 发表于 2013-1-29 08:59:24 | 显示全部楼层 |阅读模式
function(){}() //匿名函数立即执行, 语法分析期报错
{}.constructor //获取对象直接量的构造器,语法分析期报错

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

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

2.利用()强制实现
(function(){})(),(function(){});//强制其理解为函数(语义3 ),“函数()”表示执行该函数,即声明后立即执行了。
({}).constructor //({})强制把大括号理解成对象直接量(语义2 ),“对象.xx”表示获取对象的成员,自然后面的点运算符可以正常执行了。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表