产生闭包的条件?(如何产生闭包)
1.存在函数嵌套关系(外部函数中嵌套函数)
2.内部函数引用外部函数的变量
3.调用外部函数
什么是闭包?
闭包是一种引用关系,这个引用关系存在于内部函数中,引用的是外部函数的变量的对象
常见的闭包
1.将函数作为另一个函数的返回值
2.将函数作为实参传递给另一个函数调用
3.使用辩驳实现私有方法操作独立的私有属性
闭包的作用
1.延长外部函数变量对象的声明周期
2.让函数外部可以读写到函数内部的数据(变量/函数) 通过闭包间接的操作
注意:浏览器为了性能 后期会将外部函数中不被内部函数使用的变量清除掉
闭包的声明周期
1.产生:在嵌套内部函数定义完成时就产生了(不是在调用时),外部函数调用的时候闭包供我们使用
2.死亡:在嵌套的内部函数成为垃圾对象时
闭包的缺点和解决(内存溢出和内存泄露)
内存泄露:内存无法释放
内存溢出:内存被撑爆
//
f= null;
解决方式 让闭包机制清除 必须删除外部函数调用时候生成的(定义的)那个对应内部函数
存在几套闭包机制,取决于外部函数被调用几次
闭包面试题及解析
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);
var b=fun(0).fun(1).fun(2).fun(3);
var c=fun(0).fun(1);
c.fun(2);
c.fun(3);