第一:关于匿名函数的使用

要避免全局变量泛滥, 可以考虑使用匿名函数, 把不需要在外部访问的变量或者函数限制在一个比较小的范围内。

例如以下代码:

  1. <script>
  2. function func1(){
  3. var list = ["a", "b", "c"];
  4. for(var i = 0; i < list.length; i++){
  5. //..
  6. };
  7. }
  8. func1(); // 自动运行
  9. </script>

上述代码的作用是在页面加载的时候自动执行某些操作, 并不需要被外部调用, 但是它执行过后却留下了一个全局的函数。

像这种情况, 非常有必要使用匿名函数:

如下述代码所示:

  1. <script>
  2. (function func1(){
  3. var list = ["a", "b", "c"];
  4. for(var i = 0; i < list.length; i++){
  5. //..
  6. };
  7. })(); // 自动运行
  8. </script>

匿名函数的书写格式(不带参数的情况下):

  1. (function(){
  2. // 代码块
  3. })();

如果后面需要添加参数的话,则这样书写:

  1. (function(arg1, arg2, argN){
  2. //..
  3. })(arg1, arg2, argN);

第二:有关命名空间的使用规范:

命名空间可以有效减少全局变量的使用,是个很不错的规范JS代码的方式,在JS中命名空间需要进行如下操作:

“对象-属性”:

  1. window.com = {}
  2. window.com.bytter = {}
  3. window.com.bytter.hello = function(){
  4. alert("hello");
  5. }

那么什么情况下才会使用到命名空间呢?

如果您需要给某个已经存在的页面添加一些功能,有可能需要添加好多个函数,而且正好那个页面当中已经存在了好多的全局变量和函数,甚至还存在某些函数和你要新增加的函数同名,这时我们就可以使用命名空间了:

你创建一个命名空间, 把你的新函数都放在那个命名空间之下, 就可以了:

  1. <button type="button" onclick="pg.check.userAcc()">检查用户名</button>
  2. <button type="button" onclick="pg.check.userAcc()">检查帐号</button>
  3. <script>
  4. window.pg = {}
  5. window.pg.check = {
  6. // 检查用户名
  7. userName: function(){
  8. //..
  9. },
  10. // 检查帐号
  11. userAcc: function(){
  12. //..
  13. }
  14. };
  15. </script>

第三:如何保证多人书写的JS代码互不干扰

我们学习了匿名函数和命名空间,掌握了它们的正确使用方法,接下来我们就可以做到保证JS代码之间互不干扰:

我们把一个页面中自己维护的代码与别人维护的代码或者系统自带的代码分隔开来,做到与外部代码的耦合降低到最小。

  1. <script>
  2. // 页面命名空间
  3. window.pg = {}
  4. //命名空间的使用
  5. // 检查用户信息
  6. // 作者:张三
  7. // 最后更新: 2012.12.31
  8. (function(){
  9. // 私有变量
  10. var a, b, c;
  11. // 检查用户信息的相关方法
  12. window.pg.check = {
  13. // 检查用户名
  14. userName: function(){
  15. //..
  16. },
  17. // 检查帐号
  18. userAcc: function(){
  19. //..
  20. }
  21. };
  22. })(); // end 张三的代码
  23. //匿名函数的使用
  24. // xxx功能
  25. // 作者:李四
  26. // 最后更新: 2012.1.1
  27. (function(){
  28. window.pg.xxx = {
  29. //..
  30. }
  31. })(); // end 李四的代码
  32. </script>

第四:使得变量声明美观易读

1、变量必须在使用前用var进行声明;

2、变量的声明应该放在代码块或者函数的头部;

3、可在一行内声明多个变量,尽可能添加上注释信息

  1. // 声明变量 银行名称, 银行帐号
  2. var type, acc;
  3. // 声明变量 银行名称, 银行帐号
  4. var type = "中国银行", acc = "xxxxxx";
  5. var type = "中国银行", // 银行名称
  6. acc = "xxxxxx"; // 银行帐号
  1. 尽量使用易于理解的变量名,如:
  2. var bankType = "中国银行",
  3. bankAccount = "xxxxxx";

第五:函数和变量的命名

普通变量名和函数名采用"小驼峰式命名法", 如:firstName、lastName

作为构造函数的函数采用"大驼峰式命名法", 如以下代码所示:

  1. var Person = function(){
  2. //..
  3. }
  4. var me = new Person();
  5. 常量用大写和下划线表示,如:
  6. var ROOT_PATH = "/v10/";
 

第六:正确地使用分号,可保证JS正常压缩

尽量做到每条语句使用分号结尾(特别是需要进行压缩的js,因为省略分号常常会导致压缩失败);

第七:有关数组的定义

尽量使用简便的方式进行数组的定义:

  1. // 比较好的定义方法
  2. var list = [1, 2, 3];
  3. // 不好的定义方法
  4. var list = new Array();
  5. list[0] = 1;
  6. list[1] = 2;
  7. list[2] = 3;
 

摘自:iteye技术博客[有删改]

如何才能优雅地书写JS代码的更多相关文章

  1. 几个你所不知道的技巧助你写出更优雅的vue.js代码

    1. watch 与 computed 的巧妙结合 如上图,一个简单的列表页面. 你可能会这么做: created(){ this.fetchData() }, watch: { keyword(){ ...

  2. 优雅的敲JS代码的几个原则

    一.条件语句        1,使用 Array.includes 来处理多重 || 条件          // ----- 一般 ------ if (fruit == 'apple' || fr ...

  3. 优雅的vue.js

    优雅的vue.js代码 https://www.cnblogs.com/zhengrunlin/p/9164951.html watch 与 computed 的巧妙结合 如上图,一个简单的列表页面. ...

  4. 淘系工程师讲解的使用Spring特性优雅书写业务代码

    使用Spring特性优雅书写业务代码   大家在日常业务开发工作中相信多多少少遇到过下面这样的几个场景: 当某一个特定事件或动作发生以后,需要执行很多联动动作,如果串行去执行的话太耗时,如果引入消息中 ...

  5. 如何在一个网站或者一个页面,去书写你的JS代码

    // JavaScript Document //如何在一个网站或者一个页面,去书写你的JS代码: //1.js的分层(功能) : jquery(tools) 组件(ui) 应用(app), mvc( ...

  6. JS代码中加上alert才能正常显示效果

    模拟一个生成验证码的效果,发现JS代码中加上alert可以正常刷新,没有alert时图片就会丢失,找到解决方法,但是还不是很明白,先记录下来. 生成验证码的servlet代码如下: package s ...

  7. webstorm的live templates快速编辑功能,让你的css JS代码书写速度飞起来

    前言: Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码, 大大提高了HTML/CSS代码编写的速度,比如下面 ...

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

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

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

    原文地址 迁移到:http://www.bdata-cap.com/newsinfo/1741515.html 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和f ...

随机推荐

  1. ActiveMQ(六) 转

    package pfs.y2017.m11.mq.activemq.demo07; import org.apache.activemq.ActiveMQConnectionFactory; impo ...

  2. C# 通过window消息控制指定控件的scroll滚动

     [DllImport("User32.dll", CharSet = CharSet.Auto, SetLastError = true)]         private st ...

  3. C++的string连接(a = a + b 与 a += b)

    大一学习C语言的时候,书上就写着a = a + b与 a += b等价,但是提倡用后者. 在CSDN上也看到一个关于a+=b和a=a+b的区别的帖子,大概内容如下:------------------ ...

  4. Codeforces Round #426 (Div. 2) D. The Bakery 线段树优化DP

    D. The Bakery   Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought req ...

  5. Spring中的AOP(学习笔记)

    是什么AOP及实现方式 AOP的基本概念 Schema-base AOP Spring AOP API AspectJ

  6. js对table操作(添加删除交换上下TR)

    <table width="100%" border="0" cellpadding="2" cellspacing="1& ...

  7. td 中设置超出宽度显示省略号失效

    td测试内容超出显示省略号时,结果没有显示省略号,而是一直往后显示,且超出了td大小,强行挤大了table. 原因是因为td默认不换行. 解决方法: 1.强制td换行. IE加上word-break: ...

  8. SD/MMC异同

    该文章转自:http://www.imhan.com/archives/12/ 经常看到SD/MMC这样的写法,在这里稍微总结一下SD卡和MMC卡的异同点吧. 首先,两者在外型的规格上是几乎一致的.而 ...

  9. vue开发购物车,解决全选单选问题

    实现全选单选,在vue中无法通过this获取input中的checkbox的checked属性,但是可以通过vue对input的特殊方式v-model来实现对应数据的绑定,同样也可以通过这种方式实现购 ...

  10. python读取一个文件的每一行判断是否为素数,并把结果写到另一个文件中

    刚刚学习python的菜鸟,这道题包括:文件的读写,python的参数调用,异常的使用,函数的使用 创建一个文本文件inti_prime.txt 执行命令:python Prime.py init_p ...