养成良好的编程习惯

全局变量

在js代码不同的作用域中,都可以访问到全局变量,这就降低了代码的安全性,所以应尽量减少全局变量的使用。

在js中全局变量的声明方式有很多种,可以用var,这是最标准的生命方式,但是如果出现下面这种写法,执行结果也不会出错:

myname='john';
console.log(myname); //john

这种书写方式相当于:

window.myname='john';

即:给全局对象(window)定义了一个属性,注意,myname是window的一个属性,也就是说通过语句:

delete myname;

可以删除掉这个值,即

console.log(myname); // undefined

但是,一个变量是没有办法通过delete方法删除的。

需要注意的是,如果一个变量没有经过定义就进行运算符运算,则也相当于给全局对象添加了一个属性。即:

function fn(){
	a="123";
}
fn();
console.log(a);  //123
delete(a);
console.log(a);  //error:a is not defined

所以,我们在编写代码时,应尽可能减少全局变量的使用,并且按照严格的定义规范定义变量。

for循环

在for循环中我们总会忽略掉一些细微的问题,这在程序的运行结果上不会产生错误的结果,但是会大大降低代码的执行速度,这种问题在代码量十分庞大的程序中表现的十分明显,看下面这段代码:

for(var i=0;i<arr.length;i++){}

这段代码在执行的过程中,每次判断条件是否成立时,都要重新获取一下arr的长度,造成了很不必要的时间浪费,所以应该采用下面这种写法:

for(var i=0,max=arr.length;i<max;i++){}

这样,再循环过程中就只获取了一次arr的长度,大大减少时间成本。

避免隐式类型转换,进行比较值和表达式类型时用 === 或 !==

减少eval()的使用

使用eval会使被执行的代码被篡改,在setInterval()和setTimeout()中若将函数写成字符串形式会产生和eval()相同的效果,所以要尽量写成函数名。

eval()还有一个弊端:eval()会干扰作用域链,可以访问和修改它外部作用域中的变量,如果使用Function或new Function(这两者是相同的),他们只会看到全局作用域,可以避免本地变量污染

其他书写规范,比如空格、缩进、变量命名采用驼峰命名法等不再赘述

posted @ 2016-10-30 22:07  ljuyi  阅读(169)  评论(0编辑  收藏  举报