js闭包的应用

一、阻止垃圾回收机制

在js中,闭包可以理解为能够访问其他函数内部变量的函数,常见的闭包如下

function fn() {
  let a = 0;

  return function () {
    console.log(++a);
  }
}

let f = fn();
f(); // 1
f(); // 2

其中,被包含在fn函数中,并被返回的函数就是一个闭包函数。由于作用域链的特性,内层函数可以访问外层函数的变量,所以闭包函数访问了fn中的变量a,并被全局变量f引用。js的垃圾回收器会在函数执行结束之后清除不再被引用的变量,而在fn执行之后,由于变量a在全局作用域中被引用,所以垃圾回收机制不会作用于变量a,即如果我们不手动清除,a会一直存在内存中。这就是闭包的特性之一,可以阻止垃圾回收机制。

二、创建私有变量


function privateValue() {
    var value;
 
    this.set = function(v) {
        value= v;
    };
 
    this.get = function() {
        return value;
    };
}
var x = new privateValue();
x.set("haha");
 
console.log(x.value); // undefined
console.log(x.get()); // haha

在js中,外层函数是无法读取内层函数的变量的。利用闭包的特性,我们可以实现设置并获取函数内部变量,以此达到创建私有变量的效果。

三、避免污染全局变量

在写原生js或者jQuery代码时,可能会遇到变量重复命名导致冲突的情况,我们可以利用闭包来避免。

var a = 0;

(function() {
  var a = 1;
  
  console.log(a); // 1
})()

console.log(a); // 0

四、防抖的应用

function debounce(fn, delay = 500) {
  let timer = null;
  
  return function() {
    if (timer) {
      clearTimeout(timer);
      timer = null;
    }
    
    timer = setTimeout(() => {
      fn();
    }, delay);
  }
}

function fn() {
  console.log('哈哈哈');
}

setInterval(debounce(fn), 1000)

防抖是用户快速操作的情况下,对性能的优化的一种方案,它规定只能在用户停止操作的一段时间后才执行,也是利用了闭包的特性,将定时器存储在内存中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值