面试题答案
一键面试避免闭包与回调函数结合使用导致问题的方法
- 事件绑定场景
- 优化思路:在移除 DOM 元素时,手动解绑相关事件监听器,避免闭包引用导致的内存泄漏。
- 代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="myDiv">Click me</div>
<script>
const myDiv = document.getElementById('myDiv');
const closureCallback = function () {
console.log('Clicked!');
};
myDiv.addEventListener('click', closureCallback);
// 移除元素时解绑事件
function removeElement() {
myDiv.removeEventListener('click', closureCallback);
myDiv.parentNode.removeChild(myDiv);
}
</script>
</body>
</html>
- 定时器场景
- 优化思路:清除定时器,防止闭包引用的变量无法释放,避免内存泄漏和性能浪费。
- 代码示例:
let intervalId;
const closureFunction = function () {
let count = 0;
intervalId = setInterval(() => {
console.log(count++);
if (count === 5) {
clearInterval(intervalId);
}
}, 1000);
};
closureFunction();
总结
在事件绑定和定时器等场景下,结合闭包与回调函数时,要时刻关注资源的释放。对于事件绑定,在元素生命周期结束前解绑事件;对于定时器,在不需要时及时清除定时器,从而有效避免内存泄漏和性能问题。