日期:2014-05-16  浏览次数:20378 次

js的一些进阶知识
    如果你对js基础有所掌握,并了解作用域,原型链等基本知识。下面的文字也许对你有所帮助:
(一)参数
1、使用按字母顺序排列的单字符参数
    因为参数要尽量简短,而且在函数生命周期可能要被重用,所以使用排序后的单字符参数比使用具有实际意义的单词更值得提倡。代码举例:
function(t,d,v,i,f){...} //before
function(a,b,c,d,e){...} //after

2、不要用lengh去判断函数是否存在入参
arguments.length>1||(cb=alert) //before
1 in arguments||(cb=alert)     //after

3、参数运算
    保证代码可读性高的前提下,尽量在传参时进行变量的运算。
a=b<<1+a;x(a,1); // before
x(a=b<<1+a,1);   // after

4、当一个函数声明为无参时,可以在括号内进行变量计算。
((a=b.pop(),b.pop())+c+a) // before
((b.pop(a=b.pop())+c+a))  // after

(二)变量
1、在参数中声明变量,取代函数体内部声明变量,因为作用域的缘故,读取参数变量较之私有变量性能更高:
function(a){var b=1;...} // before
function(a,b){b=1;...}   // after
当然,以函数体内部用声明变量可以降低函数的参数污染,提高代码的可读性,要看程序员如何取舍了:
function(a,b,c,d){b=1;c=2;d=3;...} // before
function(a){var b=1,c=2,d=3;...}   // after

2、重复利用不再使用的变量,可节约存储空间:
setTimeout(function(){for(var i=10;i--;)... }, a) // before
setTimeout(function(){for(a=10;a--;)... }, a)     // after

3、既然赋值运算可以返回被赋值的变量,那么将赋值运算放在条件判断中更能节省空间。
a=this.localStorage;if(a){...} // before
if(a=this.localStorage){...}   // after

4、用数组来交换变量,使代码更简洁
var a=1,b=2,c;c=a;a=b;b=c // before
var a=1,b=2;a=[b,b=a][0]  // after

5、Js的弱类型特性,使得不同类型变量间可以进行运算。这既有优点也有缺点,所以在函数中要尽量减少负数的出现,如果出现负数,也尽量使用字符类型如”-10”,而不是数字类型-10。
(未完待续)