规范:你是否常常碰到以下问题:你总是看不懂他写的代码,或者读起来很吃力;你需要改他的代码却无从下手,或总是要去问他这里是什么改了会不会影响其他代码;你和他一起开发一个产品,你总是怕代码和他有冲突或互相影响;你的代码在多次维护任务之后变得越来越臃肿,越来越难以维护。解决以上问题只需一种方法——读我们的规范!
命名规则
JavaScript支持大小写
统一使用单引号
命名使用驼峰法则
开头字母大写,表示对象。
变量命名
变量命名
- 匈牙利命名:
开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写。
For example: long lsum = 0;"l"是类型的缩写;
s:表示字符串。例如:sName,sHtml;
n:表示数字。例如:nPage,nTotal;
b:表示逻辑。例如:bChecked,bHasLogin;
a:表示数组。例如:aList,aGroup;
r:表示正则表达式。例如:rDomain,rEmail;
f:表示函数。例如:fGetHtml,fInit;
o:表示以上未涉及到的其他对象,例如:oButton,oDate;
g:表示全局变量,例如:gUserName,gLoginTime;
- 驼峰式:
第一个单词首字母小写,后面其他单词首字母大写。
For example: firstName
函数命名
函数命名:统一使用动词或者动词+名词形式 —- fnInit()
对象方法命名使用fn+对象类名+动词+名词形式 fnAnimateDoRun()
某事件响应函数命名方式为fn+触发事件对象名+事件名或者模块名 fnDivClick()
附常用的动词列表:
名称 | 含义 | 名称 | 含义 |
---|---|---|---|
get | 获取 | set | 设置 |
add | 增加 | remove | 删除 |
create | 创建 | destory | 移除 |
start | 启动 | stop | 停止 |
open | 打开 | close | 关闭 |
read | 读取 | write | 写入 |
load | 载入 | save | 保存 |
create | 创建 | destroy | 销毁 |
begin | 开始 | end | 结束 |
backup | 备份 | restore | 恢复 |
import | 导入 | export | 导出 |
split | 分割 | merge | 合并 |
inject | 注入 | extract | 提取 |
attach | 附着 | detach | 脱离 |
bind | 绑定 | separate | 分离 |
view | 查看 | browse | 浏览 |
edit | 编辑 | modify | 修改 |
select | 选取 | mark | 标记 |
copy | 复制 | paste | 粘贴 |
undo | 撤销 | redo | 重做 |
insert | 插入 | delete | 移除 |
add | 加入 | append | 添加 |
clean | 清理 | clear | 清除 |
index | 索引 | sort | 排序 |
find | 查找 | search | 搜索 |
increase | 增加 | decrease | 减少 |
play | 播放 | pause | 暂停 |
launch | 启动 | run | 运行 |
compile | 编译 | execute | 执行 |
debug | 调试 | trace | 跟踪 |
observe | 观察 | listen | 监听 |
build | 构建 | publish | 发布 |
input | 输入 | output | 输出 |
encode | 编码 | decode | 解码 |
encrypt | 加密 | decrypt | 解密 |
compress | 压缩 | decompress | 解压缩 |
pack | 打包 | unpack | 解包 |
parse | 解析 | emit | 生成 |
connect | 连接 | disconnect | 断开 |
send | 发送 | receive | 接收 |
download | 下载 | upload | 上传 |
refresh | 刷新 | synchronize | 同步 |
update | 更新 | revert | 复原 |
lock | 锁定 | unlock | 解锁 |
check | out | 签出 | /check in 签入 |
submit | 提交 | commit | 交付 |
push | 推 | pull | 拉 |
expand | 展开 | collapse | 折叠 |
begin | 起始 | end | 结束 |
start | 开始 | finish | 完成 |
enter | 进入 | exit | 退出 |
abort | 放弃 | quit | 离开 |
obsolete | 废弃 | depreciate | 废旧 |
collect | 收集 | aggregate | 聚集 |
附上一段代码细细品味
1 | //类名 |
匿名函数
要避免全局变量泛滥, 可以考虑使用匿名函数, 把不需要在外部访问的变量或者函数限制在一个比较小的范围内。
1 | 例如以下代码: |
这段代码的作用是在页面加载的时候自动执行某些操作, 并不需要被外部调用, 但是它执行过后却留下了一个全局的函数。
1 | 像这种情况, 非常有必要使用匿名函数: |
匿名函数的格式:
1 | (function(){ |
命名空间
还有另外一个方法可以减少全局变量, 那就是命名空间, 在JS中可以用”对象-属性”来模拟命名空间;
1 | window.com = {} |
如果你要给某个已经存在的页面增加功能, 可能要增加十多个函数, 而那个页面已经存在大量的全局变量和函数, 甚至还有函数跟你新增的函数同名, 怎么办?
命名空间是比较好的选择, 你可以创建一个命名空间, 把你的新函数都放在那个命名空间之下, 例如:
1 | <button type="button" onclick="pg.check.userAcc()">检查用户名</button> |
互不干扰
结合上述的匿名函数和命名空间的使用, 可以把一个页面中自己维护的代码与其它的代码分隔开来, 将与外部代码的耦合降低到最小。
1 | <script> |
变量声明
变量必须在使用前用var进行声明;
变量的声明应该放在代码块或者函数的头部;
可在一行内声明多个变量, 但要考虑美观易读;
1 | // 银行名称, 银行帐号 |
空格
数值操作符(如, +/-/*/% 等)、比较符(大于、小于、等于)两边留空格;
逗号、冒号、分号后要留一个空格(如果后面还有内容的话);
行尾不要有空格;
点号前后不要出现空格;
函数名末尾和左括号之间不要出现空格;
字符串
表示字符串用单引号或双引号均可, 建议统一使用双引号,
1 | 但表示html标签时一律使用单引号, 如: |
注释规范
单行注释
语法:
// 这是单行注释
使用方式:
- 单独一行://(双斜线)与注释文字之间保留一个空格。
- 在代码后面添加注释://(双斜线)与代码之间保留一个空格,并且//(双斜线)与注释文字之间保留一个空格。
- 注释代码://(双斜线)与代码之间保留一个空格。
示例:
1 | // 调用了一个函数;1)单独在一行 |
多行注释
语法:/* 注释说明 */
使用方法:
- 若开始(/)和结束(/)都在一行,推荐采用单行注释。
- 若至少三行注释时,第一行为/,最后行为/,其他行以开始,并且注释文字与保留一个空格。
示例:
1 | /* |
函数(方法)注释
说明:函数(方法)注释也是多行注释的一种,但是包含了特殊的注释要求,参照 javadoc(百度百科)。
语法:
/**
* 函数说明
* @关键字
*/
常用注释关键字:(只列出一部分,并不是全部)
示例:
注释名 | 语法 | 示例 |
---|---|---|
@name | @name 名称 | @name WacthClock |
@author | @author 作者 邮箱 | @author Luuman luumans@qq.com |
@brief | @brief 描述 | @brief this is watch for clock in canvas. |
@dateTime | @dateTime 时间 | @dateTime 2016-11-27 |
@moreInfo | @moreInfo 链接 | @moreInfo luuman.github.io/[link] |
@version | @version XX.XX.XX | @version 1.0.3 |
@param | @param 名 {[type]} 描述信息 | @param name {String} 传入名称 |
@return | @return {[type]} 描述信息 | @return {Boolean} true:可执行;false:不可执行 |
@example | @example 示例代码 | @example WacthClock({}); |
1 | /** |
1 | /** |