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

js中的闭包

目录

一、闭包

二、常见问题

1.for循环+var的输出

三、解决方案 

1.修改为let声明

2.使用立即执行函数

一、闭包

闭包就是一个函数可以持续访问外部作用域(非全局作用域)中的变量,即使外层函数已经执行完毕。


function closure() {let a = 10;return function () {return a;};}let fun1 = closure();//函数可以访问另一个函数的局部变量,即使外层函数已经执行完毕let number = fun1();//10

二、常见问题

1.for循环+var的输出

因为var没有块级作用域,每次迭代都是同一个变量,五次循环最终的i为5,因为setTimeout为异步任务,等循环结束后,才开始输出,此时会输出5次5

 for (var i = 0; i < 5; i++) {setTimeout(() => {console.log(i);}, 0);}//输出5次5

三、解决方案 

1.修改为let声明

let为块级作用域,每次迭代都是不同的变量,所以每次输出的值不同

 for (let i = 0; i < 5; i++) {setTimeout(() => {console.log(i);}, 0);}//输出0,1,2,3,4

2.使用立即执行函数

for (var i = 0; i < 5; i++) {//立即执行函数会创建独立作用域(function (j) {setTimeout(() => console.log(j), 100); // 输出0,1,2,3,4})(i);}
http://www.xdnf.cn/news/12989.html

相关文章:

  • 关于MQ之kafka的深入研究
  • VESA DSC 基于FPGA DSC_Encoder IP仿真
  • 端口扫描介绍及使用(学习笔记)
  • REBT 分类任务中,`loss`(损失值)和 `logits`(原始预测分数)是什么
  • 机器学习之聚类Kmeans算法
  • rk3506上移植lvgl应用
  • 全链游戏模式:自治世界与AI增强型交互
  • NLP学习路线图(三十五): 情感分析
  • leetcode 264. 丑数 II
  • Java高频面试之并发编程-25
  • 电路图识图基础知识-远程/本地启停电动机(二十一)
  • 小天互连IM系统接入DeepSeek,开启智能化沟通与协作的新时代
  • BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
  • 认识CMake并使用CMake构建自己的第一个项目
  • NoSQL 之 Redis集群
  • Qt+OPC开发笔记(二):OPC客户端介绍与读取和写入bool类型Demo
  • ETS5430:多通道高性能汽车以太网接口卡
  • c语言——字符函数
  • UI自动化测试:现状,效果和最佳实践
  • #Uniapp篇:chrome调试unapp适配
  • MySQL 安装与使用详解
  • 宇树科技,改名了!
  • 案例分享 | 新东方文旅小程序设计优化
  • 解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
  • AI病理诊断七剑下天山,医疗未来触手可及
  • JavaSec-其他漏洞
  • 安全领域新突破:可视化让隐患无处遁形
  • 树莓派超全系列教程文档--(60)树莓派摄像头操作命令及使用其二
  • LeetCode Hot100刷题——合并两个有序链表
  • 电商价格监控 精准控价的关键路径