了解JS中的闭包,有何优缺点
1 闭包特性
1.函数嵌套函数
2.函数内部可以引用函数外部的参数与变量
3.参数和变量不会被垃圾回收机制回收
2 使用方式
作为函数返回值
function f1(){
return function(){
console.log(1)
}
}
f2 = f1()
f2()
小案例,如果想要如下代码每隔1秒打印的结果是0-4,该如何进行改动
function f1(){
for(var i = 0; i<5; i++){
setTimeout(function(){
console.log(i)
},i*1000)
}
}
第一种,可以将var修改为let,因为let具备块级作用域
第二种,使用匿名自执行函数
function f1(){
for(var i = 0; i<5; i++){
(function(i){
setTimeout(function(){
console.log(i)
},i*1000)
})(i)
}
}
f1()
3 优缺点
1.优点
可以在函数内部引用函数外部的参数与变量,在内存中维持一个变量,可以做缓存。
保护函数变量的安全,实现封装,防止变量跑到外层作用域中,发生命名冲突。
匿名自执行函数,可以减小内存消耗。
2.缺点
内存消耗,闭包使用不当容易造成内存泄漏。
性能问题,使用闭包时,会涉及到跨作用域访问,每次访问都会导致性能损失。
- 本文作者: étoile
- 版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!