JavaScript学习笔记——语言基础(2)

1、当你查询一个不存在的数组索引,结果会是undefined。

2、遍历一个数组可以像下面这样写:

for(var i = 0;i < a.length; i++){

   //Do something with a[i]  

 }
     但这样效率比较低,因为每次循环都会计算一次数组长度。可以修改成:
for(var i = 0, len = a.length; i < len; i ++){

    //Do something with a[i]

}

    还有一种更好的写法是:

for(var i = 0, item; item = a[i]; i ++){

   //Do something with a[i]

}

  最后这种写法需要保证数组中不包含值是false的元素,否则还是用其他写法。

4、JavaScript中的函数调用,可以不给它传递预期的参数,此时,参数是undefined。

5、函数调用时,可以传递多于函数期望得到的参数数量,多余的将被忽略。函数会调用函数体内部的一个arguments内部对象。类似于数组对象,保存了函数调用时被传入的参数。所以多余的参数也可以通过从arguments中获取而被利用。

6、JavaScript中函数可以通过apply()调用,apply()有两个参数,第二个参数是一个数组,相当于把这个数组作为参数传递给原函数。JavaScript中的函数实际上也是一种对象。

7、闭包(closure)是JavaScript最强大的功能之一。当执行一个函数时,该函数会创建一个“范围对象”,这个对象用来保存这个函数中创建的局部变量。当这个函数执行完毕return后,通常JavaScript的垃圾回收器会清理掉“范围对象”。但返回值是个函数对象,新的函数中保留着对“范围对象”的引用,所以,此时不会回收这个“范围对象”。直到指向这个“范围对象”的引用计数为零才会回收。范围对象组成了一个范围链,类似于原型(prototype)链类似。

8、在IE中,闭包容易引起内存泄露,因为IE浏览器有自己的垃圾回收机制,而不是使用JavaScript自身的,两者之间的交互可能会引起内存泄露。

9、JS中的delete操作符与java,C++等语言不同,是用来删除一个对象的属性的。

你可能感兴趣的:(JavaScript)