随笔-57  评论-129  文章-0  trackbacks-0

带ID的函数表达式:

var fn = function fnid(){};  

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

with({fnid:null}){  
  
var fn = fnid = function(){};  
}  

 


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

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

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

怪癖的代码

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

 

常见错误有:

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

 

posted on 2007-06-30 16:47 金大为 阅读(1227) 评论(3)  编辑  收藏 所属分类: JavaScript

评论:
# re: JS几处怪癖的语义 2007-06-30 21:44 | 猪头小队长
var vaiable =0;
function test(){
variable =1;//别担心,不会改动全局变量vaiable
}

test();
alert(vaiable);

打印的是1,而不是0,怎么回事?  回复  更多评论
  
# re: JS几处怪癖的语义 2007-07-01 08:11 | 金大为
@猪头小队长
呵呵,你看看你这个函数和我的例子有什么不同吧:)  回复  更多评论
  
# re: JS几处怪癖的语义 2007-07-01 10:39 | 猪头小队长
hehe,faint  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: