//基本技巧 //尽量少用全局变量 myglobal = 'hello'; //反模式 console.log(myglobal) console.log(window.myglobal) console.log(window['myglobal']) console.log(this.myglobal) function sum(x,y){ result = x + y; return result; } function foo(){ var a = b = 0; //不要这么写,拒绝链式赋值 } //代码移植的时候,全局变量会非常危险 //用var声明的变量不能用delete删除 var gvar = 1; gnovar = 2; (function(){ fromFuncVar = 3; })(); console.log(delete gvar); //false console.log(delete gnovar); //true console.log(delete fromFuncVar); //true console.log(gvar); //1 //console.log(gnovar); //undefined //console.log(fromFuncVar); //undefined //访问全局变量的名字叫window,也可以自己定义,以防万一 var glob = (function(){ return this; })(); //单一var模式 function func(){ var a, b, sum = a + b; } //变量提升 myname = 'xudy' function func2(){ alert(myname); //undefined //等同于var myname = undefined; var myname = 'lpf'; alert(myname); //myname; } func2(); //for循环注意事项 var arr = [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0] var d1 = new Date().getTime() for(var i = 0; i < arr.length; i++){ //这么写的坏处就是,每次循环都要访问对象的长度,有点慢 console.log(arr[i]) } console.log('------------' + (new Date().getTime() - d1)); //6毫秒 d1 = new Date().getTime() for(var i = 0, length = arr.length; i < length; i++){ console.log(arr[i]); } console.log('------------' + (new Date().getTime() - d1)); //3毫秒 d1 = new Date().getTime() for(var i = arr.length;i--;){ console.log(arr[i]); } console.log('------------' + (new Date().getTime() - d1)); //2毫秒 跟0比较更快 //不要为内置原型添加方法 //switch语句 var inspect_me = 0, result = ''; switch(inspect_me){ case 0: result = 'hero'; break; case 1: result = 'xudy'; default: result = 'unknow'; } //避免隐士类型转换,尽量用 === !=== //避免使用eval //parseint的数值约定 var month = '06', year = '09'; console.log(parseInt(month)); console.log(parseInt(month, 10)); console.log(parseInt(year)); //书上说会转成0,但是本人操作还是9,。。。 console.log(parseInt(year, 10)); //大括号 function func3(){ return { name: 'xudy' } } console.log(func3()) //undefined //相当于 function func3(){ return undefined; //所以接下来的代码并不会执行到 { name: 'xudy' } } //构造函数首字母大写 function Person(){} //单词分割 //即,函数名字,用小驼峰,变量名字用_分割 function getName(){} var first_name = 'xu'; //常量的名字要全部大写 var PI = 3.14, MAX_WIDTH = 800; //私有属性用_ //要对函数、函数参数、返回值进行注释 //编写API文档 //jsDoc toolKit //YUIDoc