养成良好的编程习惯

全局变量安全

在js代码不一样的做用域中,均可以访问到全局变量,这就下降了代码的安全性,因此应尽可能减小全局变量的使用。函数

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

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

这种书写方式至关于:spa

window.myname='john';

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

delete myname;

能够删除掉这个值,即regexp

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循环string

在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(这二者是相同的),他们只会看到全局做用域,能够避免本地变量污染

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

相关文章
相关标签/搜索