闭包是指有权访问另一个函数作用域中的变量的函数,常见的问题是在循环中创建闭包时,由于闭包中引用了外部变量,导致循环变量泄露。
解决方法有两种:
示例代码如下:
for (let i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i); // 使用let关键字声明循环变量
}, 1000);
}
for (var i = 0; i < 10; i++) {
(function(j) { // 使用立即执行函数表达式
setTimeout(function() {
console.log(j);
}, 1000);
})(i);
}
内存泄漏是指在JavaScript程序中,由于某些原因导致一些不再使用的对象仍然被占用,从而导致内存浪费。
常见的内存泄漏原因有:
解决方法有:
示例代码如下:
// 避免意外的全局变量
function test() {
let a = 1;
console.log(a);
}
// 避免创建过多的闭包
function test() {
let arr = [];
for (let i = 0; i < 100000; i++) {
arr.push(function() {
console.log(i);
});
}
return arr;
}
let res = test();
res = null;
// 及时清理不再使用的DOM引用
let elem = document.getElementById('elem');
elem.parentNode.removeChild(elem);
elem = null;