深入学习JavaScript系列学习笔记(一)

1、最小全局变量

全局变量:在任何函数内部声明或未声明而直接使用的变量。

全局对象:在任何函数的外部可以使用this访问,window指向该全局对象。

全局变量是全局对象的属性。

2、全局变量的问题

由于页面中常含引入的第三方文件,故可能存在命名冲突的问题,导致先定义的变量被覆盖。

不使用var声明的变量会隐含成为全局变量,如:result = 0;

避免出现全局变量命名冲突的办法是尽量使用var对变量进行声明,

可以使用链分配:var a,b; 但不要使用任务链:var a=b=0;该写法会导致b成为隐式全局变量。

3、var声明的全局变量与隐式全局变量的区别

var声明的全局变量不能通过delete global_var 删除;

隐式全局变量可以通过delete 进行删除。

4、访问全局对象

可在任何层级的函数作用域中访问全局对象:

var global = (function () {
   return this;
}());

5、避免全局变量命名冲突的方法

单var模式

function func() {
   var a = 1,
       b = 2,
       sum = a + b,
       myobject = {},
       i,
       j;
   // function body...
}

初始化变量同时初始化值的做法是很好的。

当使用DOM(文档对象模型)引用时,可以使用单一的var把DOM引用一起指定为局部变量,就如下面代码所示:

function updateElement() {
   var el = document.getElementById("result"),
       style = el.style;
   // 使用el和style干点其他什么事...
}

6、var声明提升

// 反例
myname = "global"; // 全局变量
function func() {
    alert(myname); // "undefined"
    var myname = "local";
    alert(myname); // "local"
}
func();

所有的变量声明会被悬置到函数的顶部,为了避免这种混乱,最好是预先声明你想使用的全部变量。

7、for循环

当你循环获取值时,缓存数组(或集合)的长度是比较好的形式

for (var i = 0, max = myarray.length; i < max; i++) {
   // 使用myarray[i]做点什么
}

8、for-in循环

for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”

hasOwnProperty()方法,当遍历对象属性的时候可以过滤掉从原型链上下来的属性

待补充

9、避免扩增构造函数的prototype属性

增加内置的构造函数原型会严重降低了可维护性,除非确保满足以下原则:

待补充

10、switch模式

case以break清楚结束

避免贯穿

11、避免隐式类型转换

==与===的区别

12、避免使用eval()

eval()存在安全隐患,被执行的代码可能已经被篡改

如果你绝对必须使用eval(),你 可以考虑使用new Function()代替。

另一种方法来阻止自动全局变量是封装eval()调用到一个即时函数中

13、parseInt的使用

在ECMAScript 3中,开头为”0″的字符串被当做8进制处理了,但这已在ECMAScript 5中改变了。为了避免矛盾和意外的结果,总是指定基数参数。

var month = "06",
    year = "09";
month = parseInt(month, 10);
year = parseInt(year, 10);

此例中,如果你忽略了基数参数,如parseInt(year),返回的值将是0,因为“09”被当做8进制(好比执行 parseInt( year, 8 )),而09在8进制中不是个有效数字。替换方法是将字符串转换成数字,包括:

+"08" // 结果是 8
Number("08") // 8

14、缩进、花括号等相关使用

15、命名规范

以大写首字母写构造函数

驼峰命名法

常数:字母全大写

使用一个下划线前缀来表示一个私有属性或方法

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章