MST

星途 面试题库

面试题:JavaScript 中闭包代码优化之内存释放问题

在以下 JavaScript 代码中,存在一个闭包,如何优化这段代码以确保在不再需要闭包时能正确释放内存?请说明优化思路并给出优化后的代码。 ```javascript function outerFunction() { let data = { importantValue: '一些重要数据' }; return function innerFunction() { console.log(data.importantValue); }; } let closure = outerFunction(); closure(); ```
20.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

优化思路

在上述代码中,innerFunction 形成了闭包,它持有对 outerFunction 作用域中 data 的引用,导致即使 outerFunction 执行完毕,data 也不会被垃圾回收机制回收。优化的思路是当不再需要闭包时,手动断开闭包对外部作用域变量的引用。

优化后的代码

function outerFunction() {
  let data = { importantValue: '一些重要数据' };
  let inner;
  inner = function innerFunction() {
    console.log(data.importantValue);
    // 执行完需要的操作后,手动断开对 data 的引用
    data = null;
    inner = null;
  };
  return inner;
}
let closure = outerFunction();
closure();
// 此时 data 和 innerFunction 都可以被垃圾回收机制回收