JS几处怪癖的语义

JS几处怪癖的语义

带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){ // 没准那个角落里面已经给当前函数内同名变量给赋值了就惨了  
   // ..  
}  

 

你可能感兴趣的:(JS几处怪癖的语义)