使用闭包进行 JavaScript 内存优化(案例研究)

2025-05-24

使用闭包进行 JavaScript 内存优化(案例研究)

JavaScript 中,除了函数是“一等公民”之外,还有很多其他特性,让函数可以发挥更大的作用。闭包就是其中之一。

什么是闭包?

闭包是将函数与其周围状态(词法环境)的引用捆绑在一起(封闭)的组合
。Mozilla

让我们举个例子:

function adder(a) {
  return function(b) {
    return a + b;
  };
}

let add5 = adder(5);
let add10 = adder(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12
Enter fullscreen mode Exit fullscreen mode

从上面的代码中,我们清楚地了解了闭包是如何工作的,以及它是如何记住函数声明时的词法作用域的。但这究竟有什么用呢?或者这只是 JavaScript 面试中一些不太实用的问题?

别担心,JavaScript 生态系统中闭包的应用和用法已经非常丰富。今天,我们想讨论的是如何使用闭包来优化内存使用。请考虑以下代码:

function multiply(y){
    let x = Math.pow(10,10);
    return x* y;
}
multiply(25); //250000000000
multiply(45); //450000000000

Enter fullscreen mode Exit fullscreen mode

它看起来很简单,对吧?...不,实际上,如果您注意到每次调用multiply()函数时, let x = Math.pow(10,10)都会重新创建并占用一定的内存,在这种情况下肯定会占用相当大的内存,因为它生成的数值很大。

结束

如果我们能够只创建一次let x = Math.pow(10,10); ,就像在multiply()函数调用中重复执行一样,这时闭包就派上用场了。让我们看一下下面修改后的代码:

function multiply(){
    let x = Math.pow(10,10);
    return function(y){
        return x* y;
    }
}
let multiplier= multiply();
multiplier(25); //250000000000
multiplier(45); //450000000000
Enter fullscreen mode Exit fullscreen mode

这里我们引入了返回一个内部函数,它会创建一个闭包,这样每次调用multiplier()时就无需重新创建let x = Math.pow(10,10);,从而避免了过多的内存泄漏。这告诉我们,通过使用闭包,我们可以轻松避免耗费内存的作业。

今天就到这里。希望你从这个案例研究中有所收获,或者如果你也遇到过类似的情况,也欢迎分享你采取的方法。敬请期待下一篇 JS hack!😃

文章来源:https://dev.to/ahmedgmurtaza/use-closures-for-memory-optimizations-in-javascript-a-case-study-43h9
PREV
CSS 网格初学者指南
NEXT
你必须了解的Web安全知识(第一部分:HTTPS、TLS、SSL、CORS、CSP)什么是Web安全?Web安全的不同类型: