在JavaScript中,嵌套函数是指在一个函数内部定义的另一个函数。嵌套函数可以访问外部函数的变量和参数(即闭包特性),而外部函数可以通过返回内部函数来将其暴露给外部作用域。
现象:
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i); // 总是输出5
}, 100);
}
原因:所有回调共享同一个i变量引用
解决方案:
现象:外部函数变量被嵌套函数引用,即使不再需要也无法被垃圾回收
解决方案:在不再需要时手动解除引用
function createHeavyObject() {
const largeData = new Array(1000000).fill('data');
return {
getData: function() { return largeData; },
cleanup: function() { largeData.length = 0; }
};
}
const obj = createHeavyObject();
// 使用后清理
obj.cleanup();
现象:
const obj = {
name: 'Object',
getName: function() {
return function() {
return this.name; // undefined
};
}
};
原因:嵌套函数中的this不指向外部对象
解决方案: