1.缺点:*函数执行完毕后,函数内的局部变量没有释放,占用内存的时间会变长
*容易造成内存泄漏
2.解决:
*能不用闭包就不用
*及时释放
3.内存溢出:
*一种程序运行出现的错误
* 当程序运行需要的内存超过剩余的内存时,就会出现内存溢出的错误
4.内存泄漏:
*占用的内存没有及时释放
*内存泄漏积累多了就容易导致内存溢出
*常见的内存泄漏:
*意外的局部变量
*没有及时清理的计时器或 回调函数(回调就是一个函数的调用过程。那么就从理解这个调用过程开始吧。函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调)
function a(callback)
{
alert("我是parent函数a!");
alert("调用回调函数");
callback();
}
function b(){
alert("我是回调函数b");
}
function c(){
alert("我是回调函数c");
}
function test()
{
a(b);
a(c);
}
*闭包题目
1.
var name = "The Window";
var object = {
name: "My Object",
getNameFunc : function(){
return function(){
return this.name; //这里没有闭包
};
}
};
console.log(object.getNameFunction()()); //The Window
2.
var name2 = "The Window";
var object = {
name2: "My Object";
getNameFunc : function(){
var that = this;
return function(){
return that.name2; //这里有闭包
};
}
};
console.log(object.getNameFunction()()); //My Object
3.
function fun(n,o){
console.log(o);
return {
fun: function(m){
return fun(m,n);
}
};
}
var a = fun(0); a.fun(1); a.fun(2); a.fun(3); //undefinde 0 0 0
var b = fun(0).fun(1).fun(2).fun(3); // undefined 0 1 2
var c = fun(0).fun(1); c.fun(2); c.fun(3); // undefined 0 1 1