什么是闭包?原理是什么?如何产生闭包?
-什么是闭包:可以看做桥梁,沟通内外作用域。
-闭包的原理:当前环境存在对父级作用域的引用。
-如何产生闭包:
1.函数返回函数。
2.函数作为参数传递。
function func1(params){
return function(){
console.log(params)
}
}
let test = func1(1)
setTimeout(test, 1000);
闭包的应用
1.防抖节流
2.函数柯里化
fn(1)(2)(3)
3.单例模式
function person(name){
this.name = name
}
var getInstance = (function(){
var instance
return function(name){
if(!instance) instance = new person(name)
return instance
}
})()
var person1 = getInstance('zhangsan')
var person2 = getInstance('lisi')
console.log(person1.name);
console.log(person2.name);
console.log(person1 === person2);
4.匿名自执行函数
for (var i = 1; i < 5; i++) {
(function (i) {
setTimeout(() => {
console.log(i);
}, 1000)
})(i)
}
闭包的缺点
闭包会导致活动变量不被垃圾回收机制销毁,占用更多的内存。
解决:手动设置为null。