前端

闭包的理解 - 备忘

什么是闭包?

闭包本质上是一个绑定了执行环境的函数,携带了执行时的环境信息。 简单来说, 闭包让你可以从内部函数访问外部函数的作用域。 在现代 JavaScript 标准中,执行环境包含词法环境、变量环境、this 值、代码执行状态等。

闭包的工作原理

function outerFunction(x) { let y = 10; function innerFunction() { console.log(x + y); } return innerFunction; } const closure = outerFunction(5); closure(); // 输出 15

在这个例子中:

  1. outerFunction返回innerFunction
  2. innerFunction可以访问outerFunction的变量xy
  3. 即使outerFunction已经执行完毕,closure仍然可以访问xy

闭包的实际应用

  1. 数据隐私
function counter() { let count = 0; return function() { count++; console.log(count); } } const increment = counter(); increment(); // 1 increment(); // 2
  1. 函数工厂

自己实现一个防抖和节流

function debounce(fn, delay) { let timer; return function(...args) { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { fn.apply(this, args); }, delay); } } function throttle(fn, delay) { let lastExecTime = 0; return function(...args) { const now = Date.now(); if (now - lastExecTime < delay) return; lastExecTime = now; fn.apply(this, args); } }

闭包的优缺点

优点:

  • 数据封装
  • 实现私有变量和方法
  • 创建函数工厂

缺点:

  • 可能导致内存泄漏
  • 在某些情况下可能影响性能。
Previous
欢迎