javascript中语句注意点

对于语句,说明如下:

1、关于语句要不要加上分号结束符(;),我的观点是给每条语句都加上,不要让引擎去猜测你的程序。不过昨天看到一篇文章和我的观点正好相反,也颇能言之成理,虽然并没有改变我的观点,不过倒也令我的眼界更为宽阔。

2、对于var语句,由于ECMAScript中有声明提升现象,建议将一个作用域中用到的变量都放到顶部,用一个var语句定义多个变量,这样容易理解,也不易出错。目前很多JS库也多采用这种形式,下面是取自jQuery开始中的代码:

var document = window.document,
    navigator = window.navigator,
    location = window.location;

3、用于语句块的({}),也可用于定义对象字面量。在ECMAScript中,没有块级作用域。

4、对于四种循环语句(do-while、while、for、for-in),由于for-in语句每次循环都会搜索对象本身和其原型,因此效率会比较低。关于for循环语句的优化:

// 1.一般for循环
for(var i=0; i < arr.length; i++){
}
// 2.上面在每一次循环都会重新计算一次arr的长度,如过arr是dom操作的话,会非常明显的影响效率,可以改进一下
for(var i=0,l=arr.length; i<l; i++){
}
// 3.这样整个循环就只会计算一次长度,如果考虑到递减,还可以修改成
for(var i=arr.length; i>0; i--){
}
// 4.上面不使用中间变量并且只需要计算一次长度,如果再考虑到长度永远是一个不小于0的数,并且在JS中0的Boolean值为false,可以进一步修改成
for(var i=arr.length; i ; i--){
}
// 5.考虑到JS中变量声明提升可能的影响,为了消除隐患,再修改为
var i=arr.length;
for(; i ; i--){
}

 

5、对于with语句,虽然有时会提供快捷,但是也常常会导致不可预料的结果,建议少用,甚至不用:

//1.使用with语句
with(obj){
    a=b;
}
//2.不使用with语句,和1的情况等价
if(obj.a === undefined){
    a = obj.b || b;
}else
{
    obj.a = obj.b || b;
}
//3.可能的结果
a = b;
a = obj.b;
obj.a = b;
obj.a = obj.b;

第1部分是使用with语句,第2部分是不使用with语句的等价语句,第3部分则是最终可能的运行结果,如果仅从with语句本身来看,很不容易明白程序实际运行时会发生什么。另外,在使用with语句涉及修改的时候,会有不同步的问题,看下面的代码:

var obj = {
    person:{
        name:'linjisong'
    }    
};
with(obj.person){
    obj.person = {
        name:'oulinhai'
    };
    console.info(obj.person.name); //oulinhai
    console.info(name);          //linjisong
}
在这里

 

会不经意间就产生了一个不同步。

6、在return语句返回时需注意:

return
{
    prop:'value';
}//由于引擎会自动添加分号,这里实际会返回undefined

return {
    prop:'value';
}//返回一个对象

 

posted @ 2015-04-02 22:50  SunsCheung  阅读(156)  评论(0编辑  收藏  举报