111

72 阅读1分钟

1、解决闭包

    1. 使用立即执行函数:使用立即执行函数可以创建一个新的作用域,防止闭包意外捕获外部函数的变量。
javascriptCopy code
function createClosureArray() {
    const closureArray = [];
    for (let i = 0; i < 5; i++) {
        // 使用立即执行函数创建闭包
        (function (index) {
            closureArray.push(function () {
                console.log(index);
            });
        })(i);
    }
    return closureArray;
}

const closures = createClosureArray();
closures[0](); // 输出 0
    1. 使用 letconst 替代 var:在 ES6 中引入了 letconst 关键字,它们具有块级作用域,可以避免 var 带来的变量提升和闭包问题。
javascriptCopy code
function createClosureArray() {
    const closureArray = [];
    for (let i = 0; i < 5; i++) {
        // 使用 let 关键字
        closureArray.push(function () {
            console.log(i);
        });
    }
    return closureArray;
}

const closures = createClosureArray();
closures[0](); // 输出 0
    1. 手动释放闭包:如果闭包会长时间存活,可以手动解除对闭包的引用,以便 JavaScript 引擎能够垃圾回收相关的内存。
javascriptCopy code
let myClosure;

function createClosure() {
    const localVar = 'Hello';
    myClosure = function() {
        console.log(localVar);
    };
}

createClosure();
myClosure(); // 输出 'Hello'

// 解除对闭包的引用
myClosure = null;

2、