也谈谈规范JS代码的几个注意点

  写JS代码差不多也有两年了吧,从刚开始的“初生牛犊不怕虎”乱写一通到后来也慢慢知道去规范一下自己写的代码。这种感觉就像是代码是你的作品,你希望它保持一份不仅干净而且也优雅的姿势。所以后来慢慢规范了自己写的代码,再后来觉得仅仅规范自己的代码还不行,这个团队其他人的也需要保持一致,再再后来就开始尝试写了一份代码规范,用于规范团队的代码质量。网上有不少讲代码规范的书,我也就不再献丑了,大家可以去看看阿里\百度\腾讯他们的代码规范,写的非常不错。我就仅仅把自己遇到的尝试做一下总结,这些可能别人也总结过无数次了,欢迎吐槽交流,也希望对你有点儿帮助。

  1、减少全局污染

  我们都知道javascript使用function来管理自己的作用域,一个定义在函数内的变量对外是不可见的,这有点类似于其它语言里的私有变量。对于javascript的执行环境来说一般都有一个全局变量,在所有的函数外可以用this来指引,例如在浏览器端是window。但是当过多的在全局执行环境下定义变量会造成各种苦逼的事情,比方说你定义的变量被其他人定义的同名变量覆盖掉,或者你未来定义的变量把你过去定义的同名变量也覆盖掉,而且过多的全局变量放在执行对战里还会造成内存的浪费等等不优化的情况发生。我就不再具体讲没个苦逼的事情是如何苦逼了,仅仅讲讲可能会导致这种情况发生的不好的示例吧。

  ①声明变量忘记使用“var”的情况。

 var sample = function () {
var a1 = "hello";
a2 = "world";
};
sample();
alert(a1);//undefined
alert(a2);//world

  如你所见,a2因为忘记使用var导致了它成为了全局的变量,这样就有可能造成其它地方的修改覆盖它或者将其它地方的变量覆盖等(忘记var也会使得该变量可以delete)。正确的做法是,所有的变量都使用“var”,并且尽量都生命在函数体的头部,这样一目了然。如下:

 var sample = function () {
var a1 = true,//标识位1
a2 = true, //标识位2
a3 = false;//标识位3
//do some logic
};

  (注:用“,”号隔开变量可以避免过多使用"var"。)

  ②变量名提升。

  javascript中函数内所有使用var声明的变量都会提升到函数体头部,这也是很多人容易犯错的一点。具体来讲就是:

 myname = "global";
function sample() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
sample();

  如你所见,第一个alert出来的并非global。原因在于,函数sample内部声明的myname会提升到函数体顶部,而原语句的地方才是正在赋值的地方。在声明和赋值直接引用的话肯定是undefined了。其执行效果如下:

 myname = "global";
function sample() {
var myname;//没有赋值
alert(myname); // "undefined"
myname = "local";//此处赋值
alert(myname); // "local"
}
sample();

  所以一个重要的经验就是,在函数体讲所有的var声明的东西都拿到函数体顶部,以免造成不必要的错误。

  2、for循环。

  我们习惯将for循环写成如下形式:

 for (var i = 0; i < myarray.length; i++) {
//logic
}

  看似没有问题,但是如果myarray是读取的DOM的节点,那么每一次循环都要去DOM里选取节点再做判断,非常影响性能。可能数量不大感觉不错来,多了就非常严重了。所以,for循环判断条件里尽量不要使用涉及到DOM操作的动作。优化如下:

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

另外一个就是使用for-in循环对象的话会读取对象从原型链里的属性,如果这不是希望的,那么可以用一个判断hasOwnProperty(i)去掉它。

  3、用“===”取代“==”

  前者是严格判断,后者会提前进行隐式的类型转换。

  4、不使用eval()

  5、统一缩进大小(无论用tab或者2个或者4个空格,团队统一即可),任何用花括号括起来并换行的都进行缩进。

  6、花括号{}

  for循环或者if判断等,即使只有一行,也要换行并用{}括起来。

  7、空格

  任何“;”后空一格、for循环中初始化“,”后空一格、数组中","后空一格、对象中“:”后空一格、如:

 for (var i = 0, j = 1; i < 10; i += 1){
2 var some = [1, 2, 3];
3 var obj = {aa: 1, bb: 2}
3 }

  函数参数里“,”后空一格、函数声明中花括号前空一格、函数表达式中括号前后各空一格,如:

 func(a, b, c){};
function func() {};
var func = function () {};

  所有的操作符前后都跟一个空格,如:

 var d = 0,
a = b + 1;
if (a && b && c) {
d = a % c;
a += d;
}

  8、命名规则

  构造器函数首字母大写,如:

 function Person() {...}

  变量用驼峰式,如:

 getFirstName()

  常量全用大写字母,如:

 var PI = 3.1415926;

  私有函数用下划线开头,如:

 var person = {
_setSext: function () {
// ...
},
_setName: function () {
// ...
}
};

  9、写注释

  这一步非常关键,因为你写的代码别人不一定看得懂,你写的将来你也不一定轻易能看懂。所以良好的注释习惯可以事半功倍。

  感谢你这么大的耐性,天马行空的对着自己写的代码总结了一点儿,希望多少对你有点启发。

也谈谈规范JS代码的几个注意点的更多相关文章

  1. JS代码的几个注意点规范

    也谈谈规范JS代码的几个注意点 也谈谈规范JS代码的几个注意点 写JS代码差不多也有两年了吧,从刚开始的“初生牛犊不怕虎”乱写一通到后来也慢慢知道去规范一下自己写的代码.这种感觉就像是代码是你的作品, ...

  2. 如何才能优雅地书写JS代码

    第一:关于匿名函数的使用 要避免全局变量泛滥, 可以考虑使用匿名函数, 把不需要在外部访问的变量或者函数限制在一个比较小的范围内. 例如以下代码: <script> function fu ...

  3. js学习笔记-编写高效、规范的js代码-Tom

    编写高效.规范的js代码: 1.变量命名空间问题,尽量使用局部变量,防止命名冲突(污染作用域中的全局变量):全局空间命名的变量可以在对应的文档域任意位置中使用window调用. 2.尽量使用单var定 ...

  4. JavaScript必备:Google发布的JS代码规范(转)

    [翻译]关于Google发布的JS代码规范,你需要了解什么? 翻译 | WhiteYin 译文 | https://github.com/WhiteYin/translation/issues/10 ...

  5. 谷歌与Airbnb的JS代码规范

    谷歌JS代码规范 规范代码原因:代码规范是为了保持源代码编写模式一致,便于维护代码,可读性高. 1.使用空格代替tab 规范随后指出应该使用2个,而不是4个空格带实现缩进.(除了每一行的终止符序列,A ...

  6. JS代码规范

    JS代码规范 空格 二元运算符两侧必须有一个空格,一元运算符与操作对象之间不允许有空格. var a = !arr.length; a++; a = b + c; 复制代码 用作代码块起始的左花括号 ...

  7. 前端规范之JS代码规范(ESLint + Prettier)

    代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...

  8. Edge.js:让.NET和Node.js代码比翼齐飞

    通过Edge.js项目,你可以在一个进程中同时运行Node.js和.NET代码.在本文中,我将会论述这个项目背后的动机,并描述Edge.js提供的基本机制.随后将探讨一些Edge.js应用场景,它在这 ...

  9. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】

    原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...

随机推荐

  1. Security » Authorization » 简单授权

    Simple Authorization¶ 简单授权 82 of 86 people found this helpful Authorization in MVC is controlled thr ...

  2. 习题-任务2初始ASP.NET MVC项目开发

    一.选择题 1.在ASP.NET MVC项目的RouteConfig.cs文件中,(    )方法注册了默认的路由配置. A.RegisterMap    B.RegisterRoutes    C. ...

  3. Clojure学习笔记(二)——函数式编程

    定义 “函数式编程”是一种编程范式(programming paradigm),即如何编写程序的方法论.主要思想是把运算过程尽量写成一系列嵌套的函数调用. 举例来说,现在有这样一个数学表达式: (1 ...

  4. PHP二次开发discuz3.2最新体验

    康盛官方于6月4号发布了discuz3.2的正式版,因为这两天一直忙于一个项目,一直没来的及体验,现在抽时间总算是装上了,也体验一把. 根据官方说明:Discuz! X3.2 在继承和完善 Discu ...

  5. 修改placeholder提示内容的颜色以及文本框输入文字内容的颜色

    一般表单文本框提示信息:placeholder=" ",默认颜色是灰色的,输入文本信息也是默认为黑色的,如图所示: 修改placeholder提示内容的颜色关键代码及实现: 实现输 ...

  6. Windows Store App 主题动画

    Windows 8系统的动画库中包含了丰富的主题动画,在开发Windows应用商店应用时,使用主题动画编写较少的代码即可实现所期望的动画效果.下面介绍一些常用的主题动画,读者可以根据每种主题动画提供的 ...

  7. PDF解析

    解析如下图PDF文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  8. iOS开发UI篇—ios应用数据存储方式(归档)

    iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...

  9. juqery easyui

    私人做程序开发一直有个头疼的问题就是后台管理界面,以前一般都是自己用jquery+ps自己设计的,效果很一般,很不理想. 今天初次使用Jquery EasyUi,简单的做了个布局页面感觉还不错,给大家 ...

  10. 转: jdbc连接数据库需要注意和出错的地方

    * 1.数据库登录模式不能只使用windows登录模式,要采取混合模式登录, * 并记住相应的密码和账户: * 2.连接数据库后一定要记得关闭资源,否则就会造成资源浪费. * 关闭的时候也要注意顺序, ...