JS几处怪癖的语义

[b]带ID的函数表达式:[/b]

[code]var fn = function fnid(){};[/code]

按照ECMA262定义,上面这段脚本等价于:

[code]with({fnid:null}){
var fn = fnid = function(){};
}
[/code]
注意:fnid在with外是不可见的,但是IE没有严格遵守ECMA规范(同样的情况发生在catch语法上)。在IE上相当于:
[code]
var fnid = function(){};
var fn = fnid;
[/code]

在刚刚发布的JSA1beta上,还不能处理这个问题(新版本将这周内发布)。同时,鉴于这种语法在不同浏览器上表现不同,还是建议尽量避免使用(这点上,我个人还是更喜欢ie的方式)。


[b]var语句:[/b]
太常用了,但是,没有注意还是很容易出问题。
var 用来声明全局或函数变量,但是,只是申明,重复申明也不能置空,范围是函数或者全局空间,位置在函数或脚本顶端,与块无关,这些与常用高级语言区别很大。

怪癖的代码
[code]
var vaiable =0;
function test(){
variable =1;//别担心,不会改动全局变量vaiable
//do ........
var vaiable;//变量申明无顺序(一律置顶),只是赋值有顺序。
}
[/code]


常见错误有:
[code]var flag;//这里可能有人(包括我自己)喜欢自做聪明的利用一下变量的初始值undefined
while(!flag){//没准那个角落里面已经给当前函数内同名变量给赋值了就惨了
//.....
}[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值