文章目录
1.基本数据类型
1.1 基本数据类型
1.五种简单的数据类型:Undefined、Null、Boolean、Number、String。
2.null值表示一个空对象指针,所以使用typeof操作符检测null值时会返回’object’的原因。
3.Boolean类型的字面值true和false是区分大小写的。就是说True和False都不是布尔值,只是标识符。
1.2 复合数据类型(怎么实现深度拷贝)????
1.对象object:一组数据和功能的集合
2.深度拷贝:当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到新变量分配的空间中。不同的是,这个值的副本是一个指针,而这个指针指向存储在堆中的一个对象。复制的操作结束后,两个变量实际上将引用同一个对象。因此,改变其中一个变量,就会影响另一个变量
1.3 特殊数据类型
1.特殊数据类型Undefined、Null
1.4可变类型和不可变类型
可变类型:object
不可变类型:Boolean、String、Undefined、Null
2.闭包
2.1 闭包是什么?
闭包是指有权访问另一个函数作用域中的变量的函数。
创建闭包的常见方式就是在一个函数内部创建另一个函数。
2.2 闭包的优缺点
由于闭包会携带包含他的函数的作用域,因此会比其他函数占用更多的内存。过度使用闭包可能会导致内存占用过多。
闭包只能取得包含函数中任何变量的最后一个值。
闭包所保存的是整个变量对象,而不是某个特殊的变量。
闭包可以避免全局变量被污染。
2.3 闭包的使用场景
在网页中有时候会需要遮罩层,调用的时候我就创建一个,但是你不可能每次调用创建吧,所以如果存在就用以前的,如果不存在就创建新的,但同时有可能我永远都不需要这个遮罩层,所以我也有可能一直都不需要创建。
添加监听器时记录索引
模拟private变量
柯里化
2.4怎么处理内存泄漏
闭包在IE的这些版本中会导致一些特殊的问题。如果闭包的作用域链中保存一个HTML元素,那么就意味着该元素将无法被销毁。例:
###错误:
function a(){
var element = document.getElementById('se');
element.onclick = function () {
alert(element.id);
};
}
####正确:
function a(){
var element = document.getElementById('se');
var id = element.id;
element.onclick = function () {
alert(id);
};
element = null;
}
上面的代码中,通过把element.id的一个副本保存在一个变量中,并且在闭包中引用该变量消除了循环引用。至此并没有iejue内存泄露的问题。闭包会引用包含函数的整个活动对象,而其中包含着element。即使闭包不直接引用element,包含函数的活动对象中也仍然会保存