// 变量
const orderQuery = {};
// 函数
function stringFormat(source) {
// do something
}
const RED_BLACK_TYPE = {
RED: 'red',
CUSTOMER: 'customer',
MOBILE: 'mobile',
EMAIL: 'email',
BLACK: 'customer',
WHITE: 'white'
};
function fetchData() {
}
function fetchUrl() {
return 'http://www.baidu.com'
}
function setGateway(item) {
this.selectGateway = item;
}
let isLoading = false;
let hasError = true;
/*
* @Author: fang.yang // 无用
* @Date: 2018-07-11 17:28:07 // 无用
* @desc [红、黑名单公共服务] // 有效,说明整个块是做什么用的
* @api [api doc链接] // 如果是`loader.js`文件的话,便于查找对应api定义
*/
/**
* 负责函数
*
* @param {string} p1 参数1的说明
* @param {string} p2 参数2的说明,比较长
* 那就换行了.
* @param {number=} p3 参数3的说明(可选)
* @return {Object} 返回值描述
*/
function foo(p1, p2, p3) {
var p3 = p3 || 10;
return {
p1: p1,
p2: p2,
p3: p3
};
}
// 设置黑名单
setBlackListClick() {
// some code
}
bad
const selectGatewayId = ''; // 选择的通道ID
good
// 选择的通道ID
const selectGatewayId = '';
- 使用editorconfig来覆盖本地的编辑器设置
- 函数应该只做一件事情
- 函数的调用方与被调用方靠近
- 注释掉的代码直接删除,时间久了会忘记而不敢删除
- 所有的代码 eslint 都通过
- 对于其他开发者是否易于理解
- 不能直接使用全局变量
-
DOM操作只出现在
directives
。Angular是通过指令声明添加在元素上。directive提供通过 compiler 和 link 访问元素。 -
不能出现以
$
开头的命名。$
前缀是AngularJS内部的保留。$scope``$watch
等。 -
自定义的依赖在内置依赖后面注入。
function($rootScope, $timeout, MyDependency)
-
使用
ng-src
代替src
,使用ng-href
代替href
,ng-style
代替style
。 -
使用
ng-cloak
或者ng-bind
来绑定,避免直接使用{{}}
造成页面抖动。 -
使用
{{ ::expression }}
在初始化之后,不会再改变。在表达式计算成一个非null的值之后,AngularJs会停止watch表达式。 -
$watch
的表达式越简单越好。 -
$watchCollection
避免深度监听。 -
使用
ng-class
编写样式,css module的方式来编写。 -
及时移除不需要的
$watch
。
var unwatch = $scope.$watch("someKey", function(newValue, oldValue){
//do sth...
if(someCondition){
//当不需要的时候,及时移除watch
unwatch();
}
});
coupon // 某个单独节点
index.js // 入口文件
body.url.html // 模板文件
footer.url.html // 弹框底部模板,尽可能使用公共的,特殊的就自己编写
index.scss // css
loader.js // api交互
Controller.js // 主业务逻辑
mock.js // 模拟数据管理
其他 // 使用到的各种服务
Airbnb JavaScript Style Guide
clean code javascript
AngularJs-Es2015编码风格指南
Google's JavaScript Style Gude
AngularJS性能优化心得