面试题答案
一键面试优化思路
在上述代码中,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 都可以被垃圾回收机制回收