当前位置: 首页 > news >正文

前端面试宝典---闭包

闭包介绍

使用闭包:

  1. 在函数内声明一个变量,避免外部访问
  2. 在该函数内再声明一个函数访问上述变量(闭包)
  3. 返回函数内部的函数
  4. 使用完毕建议闭包函数=null;译放内存
function createCounter() {
    let count = 0;
    return function () {
        count++;
        return count;
    };
}

let counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
counter = null;

闭包应用场景

在 ES6 引入 let 和 const 之前,JavaScript 没有块级作用域,只有函数作用域。可以使用闭包来模拟块级作用域。以下是一个经典的循环中使用闭包的例子:

// 不使用闭包的情况
function printNumbersWithoutClosure() {
    for (var i = 0; i < 5; i++) {
        setTimeout(function () {
            console.log(i);
        }, i * 1000);
    }
}

// 使用闭包的情况
function printNumbersWithClosure() {
    for (var i = 0; i < 5; i++) {
        (function (index) {
            setTimeout(function () {
                console.log(index);
            }, index * 1000);
        })(i);
    }
}

// 测试不使用闭包的情况
console.log('不使用闭包的情况:');
printNumbersWithoutClosure();

// 测试使用闭包的情况
setTimeout(function () {
    console.log('使用闭包的情况:');
    printNumbersWithClosure();
}, 5000);
    

在这里插入图片描述

相关文章:

  • Spring AOP 学习笔记 之 常用注解
  • 数据库表设计: 批次首件检验单(自定义表单)
  • Activiti(六)- 启动、挂起、激活,查询及删除流程实例
  • Why does Java‘s hashCode() in String use 31 as a multiplier?
  • AT_abc398_e [ABC398E] Tree Game 题解
  • LLM做逻辑推理题 - 三人贴纸条游戏
  • STM32 HAL实现DHT11采集温湿度
  • 大模型面经 | DeepSeek-R1中提到的思维链(Chain of Thought,CoT)是什么?
  • 如何通过Radius认证服务器实现虚拟云桌面安全登录认证:安当ASP身份认证系统解决方案
  • 鼎讯信通 便携式雷达信号模拟器:打造复杂电磁环境的“全能型选手”
  • 突破亚马逊壁垒,Web Unlocker API 助您轻松获取数据
  • 通过使用 include 语句加载并执行一个CMake脚本来引入第三方库
  • MySQL:事务隔离级别和一致性
  • 第十章 json操作
  • java实现加密解密
  • 01_JDBC
  • 集合 Collection、Map
  • Qt炫酷仪表盘
  • 计算机网络:流量控制与可靠传输机制
  • Streamlit 最新进展分析
  • 河南省粮食和物资储备局党组书记吴祖明已任省国资委主任
  • 湘江半程马拉松赛女配速员“跑崩”,晕倒在终点?组委会回应
  • 民生访谈|电动自行车换新补贴会优化吗?今年汛期情况如何?市应急局回应
  • 竹笋食用不当,小心“鲜”变“险”
  • 王东杰:重审康有为的“大同世界”
  • 中共中央办公厅、国务院办公厅印发《农村基层干部廉洁履行职责规定》