# 命名

代码是给人(别人或者1个星期后的 自己)阅读和修改的

給变量和函数一个简单易懂的名字

可维护性++

** 以功能命名,而不是表现 isOverSeven() × VS isLegalAge() √ **

// 不好的命名
aaaa  
x1  
f  
hengxian  
createNewUserIfTheInputIsValida
te

避免全局变量

我们无法拥有代码的控制权

  • 不易维护

  • 牵一发而动全身

  • 易被覆盖,修改,而你还不知道

    // Bad var currentColor; var colorMap = { red: '红色', green: '绿色', yellow: '黄色' };

    function init() { currentColor = 'red'; }

    // Common (function () { var currentColor;

      var colorMap = {
          red: '红色',
          green: '绿色',
          yellow: '黄色'
      };
      
      function init () {
          currentColor = 'red';
      }
    

    })();

    // Good var colorManager = function () {  var currentColor;  var colorMap  =  {      red: '红色',      green: '绿色',      yellow: '黄色'  }; 

      return  { 
          init: function () {                   
              currentColor  =  'red'          
          } 
      } 
    

    }();


# 正确的注释

注释也是代码的一部分

错误的注释,相比没有注释,更可怕

介绍背景、介绍使用方式、介绍注意事项,不要重复代码的意思

//  已登陆的用户,有  name  和  age  两个属性  
var loginedUser = {           
    name:  '',           
    age:  10  
};
/*  
    *  统一登录方法  
    *  在需要登录的地方调用       
    *  如果已经登陆,会立即执行回调       
    *  否则,会显示登录窗口,登录完成后执行回 调  
    *  todo:登录窗口的  UI  优化  
*/  
function login(cb) {  
}

# 简短标记

简短标记让代码更简单易读

// Bad
var user = new Object;
user.name = 'bajiefe';
user.age = 20;

// Good
var user = {
    name: 'bajiefe',
    age: 20
};

// Bad
var userList = new Array;
userList[0] = 'bajiefe';
userList[1] = 'bajierd';

// Good
var userList = ['bajiefe', 'bajierd'];


// Bad
var age;
if(val) {
    age = val;
} else {
    age = 10;
}

// Good
var age = val || 10;


// Bad
var direction;

if(val) {
    direction = 1;
} else {
    direction = -1;
}

// Good
var direction = val ? 1 : -1;

# 减少DOM 操作

通过 className 来控制 DOM 样式

// Bad
userInput.style.cssText = 'color: red; border: 1px  solid  red;'  

// Good
userInput.className  =  ‘error;’

dom 节点修改好后再插入 dom tree

// Bad
function addAnchor(parentElement, anchorText, anchorClass) {
    var element = document.createElement('a');
    parentElement.appendChild(element);
    element.innerHTML = anchorText;
    element.className = anchorClass;
}

// Good
var element = document.createElement('a');
element.innerHTML = anchorText;
element.className = anchorClass;
parentElement.appendChild(element);

通过文档片段创建 DOM

document.createDocumentFragment();

function addAnchors(element) {
    var anchor;
    var fragment = document.createDocumentFragment();

    for(var i = 0; i < 10; i++) {
        anchor = document.createElement('a');
        anchor.innerHTML = 'test';
        fragment.appendChild(anchor);
    }

    element.appendChild(fragment);
}

通过事件代理绑定事件


# 自动分号插入

当不清楚写不写分号时,写上

var tester = function() {

}

(function() {
    console.log(tester);
})()

var a = 123

# Debug

Google 开发者工具