>[danger]闭包的应用场景 >[info]建议回答 1. `return`回一个函数 2. 函数作为参数 3. IIFE(自执行函数) 4. 循环赋值 5. 使用回调函数就是在使用闭包 6. 节流防抖 7. 函数柯里化 >[info]技术详解 闭包在 JavaScript 中有广泛的应用场景,以下是几种常见的使用场景: 1. 私有变量和方法:使用闭包可以将某些变量或方法私有化,在外界无法直接访问或修改,从而保证数据的安全性。 ```javascript function createCounter() { let count = 0; return function() { count++; console.log(count); }; } const counter = createCounter(); counter(); // 1 counter(); // 2 ``` 在上述代码中,createCounter 函数返回了一个匿名函数,该函数能够访问并修改父级作用域中的 count 变量,而且只能通过 counter 变量调用该匿名函数。 2. 延迟执行:使用闭包可以实现定时器的延迟执行,从而避免了异步回调带来的代码逻辑混乱问题。 ```javascript function delay(func, time) { return function() { setTimeout(func, time); }; } const sayHello = function() { console.log('Hello'); }; const delayedSayHello = delay(sayHello, 1000); delayedSayHello(); ``` 在上述代码中,delay 函数返回了一个匿名函数,该函数利用闭包的特性,在 1 秒后执行传入的函数。 3. 实现模块化:使用闭包可以实现类似于模块化的功能,将一些相关方法或属性封装在一个作用域内,从而提高代码的复用性和可读性。 ```javascript const myModule = (function() { let privateVariable = 0; function privateMethod() { // ... } return { publicMethod: function() { privateVariable++; privateMethod(); console.log(privateVariable); } }; })(); myModule.publicMethod(); // 1 myModule.publicMethod(); // 2 ``` 在上述代码中,myModule 是一个自执行函数,该函数返回了一个包含 publicMethod 方法的对象,公共方法可以访问并修改私有变量和方法。