概念:闭包是指有权访问其他函数作用域的变量的函数。
常见于在函数的内部创建一个函数,创建的函数有权访问当前函数的变量。
-------------------------------------------------
用途:1、创建私有方法和变量,防止变量被全局污染。
2、防止变量被回收。
--------------------------------------------------
缺点:闭包会常驻内存,容易造成内存泄漏。
解决:在退出函数之前,将不使用的局部变量全部删除,变量=null
---------------------------------------------------
实际场景:1、ajax请求成功后,在闭包中对上级作用域请求的数据的访问。
2、事件绑定的回调。
3、设置
-------------------------------------------------------
经典面试题1:
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);
---------------------------------------------------------
经典面试题2:
/ 经典面试题,循环中使用闭包解决var定义的问题
for(var i=1;i<=5;i++){
setTimeout(function timer(){
console.log(i)
},i*100)
}
答案:
1、闭包:
for(var i=1;i<=5;i++){
(
function(j){
setTimeout(()=>{
console.log(j)
},j*100)
}
)(i)
}
2、传入第三个参数
for(var i=1;i<=5;i++){
setTimeout((j)=>{
console.log(j)
},i*1000,i)
}
2、let
for(let i=1;i<=5;i++){
setTimeout(()=>{
console.log(i)
},i*1000)
}