JS闭包

ESP32驱动GC9A01圆形屏实战:Arduino平台LVGL移植与图像显示优化 本文详细介绍了在Arduino平台上使用ESP32驱动GC9A01圆形屏的实战指南,包括硬件连接、LVGL移植与图像显示优化。通过SPI配置、LVGL库安装和双缓冲机制等技巧,帮助开发者快速实现高效显示效果,适用于智能家居控制面板等应用场景。 阅读详情

JS闭包

闭包:

当内部函数被保存到外部时,将会生成闭包 ,闭包会导致原有的作用域链不会释放,造成内存溢出。

   function test() {
    var arr=[];
    for (var i = 0;i<10;i++){
        arr[i]=function () {
            console.log(i);
            document.write("\n");
        }
    }
    return arr;
  }
    var myArr = test();
    for(var j = 0; j <10;j++){
        myArr[j]();
    }

结果:

10
10
10
10
10
10
10
10
10
10

这里的结果都为10,是因为在编译阶段 当执行

arr[i]=function(){}时,只会将等号左边进行赋值,但是右边的函数定义为一个函数引用,它不知道里面的内容。所以只有当函数执行时,

它才会去找i的值那么此时i=10,但是此时它们10个函数共用一个闭包,所以此时的值是10。

 function test() {
    var arr=[];
    for (var i = 0;i<10;i++){
        (function (i) {
            arr[i]=function () {
                document.write(i);
                document.write("\n");
            }
        }(i))
    }
    return arr;
  }
    var myArr = test();
    for(var j = 0; j <10;j++){
        myArr[j]();
    }
0
1
2
3
4
5
6
7
8
9

这里用立即执行函数将变量i直接保存到function里面,所以就arr相当于10个如下function

function myArr0() {
    document.write(0);
 }
function myArr1() {
    document.write(1);
}
function myArr2() {
    document.write(2);
}
//>>>>>
function myArr9() {
    document.write(9);
}

 闭包的作用:

1.实现公有变量: 

eg:函数累加器 

    function add() {
        var count = 0;
         function work() {
            count++;
            console.log(count);
         }
         return work;
    }
    var conters = add();
    conters();
    conters();

  调用几次,就在原有的基础上加几。

2.可以做缓存(存储结构):

 

function test() {
    var num = 100;
    function a() {
        num++;
        console.log(num);
    }
    function b() {
        num--;
        console.log(num);
    }
    return [a,b];
}
var myArray  = test();
myArray[0]();
myArray[1]();

结果:>>>>101 100

这里存在一个问题,a 和b 是否共用一个test的AO,是的他们共用一个AO。

  function test() {
                var food  = "apple";
                 function a() {
                    food = "banana";
                    console.log(food);
                }
                function b() {
                    console.log(food);
                }
                return [a,b];
           }
           var myArray = test();
           myArray[0]();
           myArray[1]();

 banana

 banana

function eater() {
    var food = "";
    var  obj = {
        eat:function () {
            console.log("I am  eating "+food);
            food= "";
        },
        push:function (myfood) {
            food = myfood;
        }
    }
    return obj;
}
var eater1 = eater();
eater1.push('banana');
eater1.eat();
eater1.push('apple');
eater1.eat();

 I am eating banana

 I am eating apple

这里的 food 就相当于一个隐式的变量

3.以实现封装,属性私有化:

4.模块化开发,防止污染全局变量:

 

数据资产目录(SailCatalog)和数据地图(SailMap) 笔者接下来准备开发大数据平台(XSailboat)中的数据资产目录(SailCatalog)和数据地图(SailMap)相关的功能,本文用以记录笔者关于此部分功能的概念梳理和主体功能设计。 阅读详情

相关推荐

手把手教你用Python实现最简单的语义通信(Sem Comm)Demo

本文通过Python和PyTorch,手把手教你构建一个基于深度学习的语义通信(Semantic Communication)Demo。该Demo使用自编码器架构,从MNIST图像中提取低维语义特征进行传输与重建,实现了从“传输比特”到“传递含义”的跨越,并探讨了其效率优势与鲁棒性。

weixin_29080843的博客 246

【JavaScript】一文了解JS的闭包

详解JavaScript的闭包使用及其日常开发遇到的常见问题

ztK63LrD的博客 4053

告别“盲开”:手把手教你用MCU内置比较器搞定BLDC无感方波启动(附代码片段)

本文详细介绍了如何利用MCU内置比较器实现BLDC无感方波启动,解决传统无传感器控制中的'盲开'问题。通过虚拟中性点电路设计和三段式启动流程,结合反电动势检测和过零检测技术,提供了一套经济高效的解决方案,并附有可直接移植的代码片段,助力工程师快速实现可靠的无感控制。

weixin_33694172的博客 503

JavaScript — 闭包、闭包的作用、生命周期、自定义JS模块

目录 一、理解闭包 1.如何产生闭包? 2.闭包到底是什么? 3.产生闭包的条件? 4.常见的闭包 二、闭包的作用 三、闭包的生命周期 四、闭包的应用——自定义JS模块 五、闭包的缺点及解决 1.缺点 2.解决 一、理解闭包 1.如何产生闭包? 当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包 2.闭包到底是什么? *使用chrome调试查看 *理解一:闭包是嵌套的内部函数(绝大部分人) *理解二:包含被引用变量(函数)的..

m0_59897687的博客 1130

QEMU+KVM实战:5分钟搞定Ubuntu 24.04虚拟机搭建(附性能优化技巧)

本文详细介绍了在Linux宿主机上使用QEMU和KVM快速搭建Ubuntu 24.04虚拟机的完整实战流程。内容涵盖从环境准备、核心组件解析到具体的安装命令,并重点分享了针对CPU、内存、存储I/O及网络性能的深度优化技巧,旨在帮助用户构建一个响应迅速、资源隔离良好的高性能虚拟化开发与测试环境。

j2k3l4的博客 753

FPGA实战:MIG IP核AXI接口DDR3读写优化指南

本文详细解析了FPGA中MIG IP核AXI接口的DDR3读写优化策略,涵盖关键参数配置、突发传输技巧及时序收敛方案。通过AXI接口优化和突发长度选择,可实现高达12.8GB/s的理论带宽,提升DDR3访问效率。文章还提供了Vivado配置实例和调试技巧,助力开发者解决FPGA内存控制中的实际问题。

weixin_29168393的博客 546

js javascript 前端 闭包

文章目录一、前言二、案例1. 函数闭包2. 对象闭包3. 缓存案例4. 沙箱5. 经典案例 参考资料: 菜鸟教程 博客1 一、前言 闭包指能够读取其他函数内部变量的函数。 二、案例 1. 函数闭包 function a(){ var num=1; function b(){ num++; cosole.info(num); } } 2. 对象闭包 function e(){ va...

helloWorldAndYou的博客 250

动态博弈、威胁与承诺(博弈论入门学习笔记四)

0 动态博弈 动态博弈:行动有先后顺序,不同的参与人在不同时点行动,先行动者的选择影响后行动者的选择空间,后行动者可以观察到先行动者做了什么选择。例如下棋、消费者和商家讨价还价、谈婚论嫁、企业之间的价格战等等。 因此,为了做出最优的行动选择,每个参与人都应该思考:如果我如此选择,对方将如何应对?如果我是他,我将会如何行动?给定他的应对,什么是我的最优选择? 动态博弈中的战略:在博弈开始之前就...

stepho的博客 1万+

【JavaScript基础】深入了解JS的闭包

闭包是JS中一个重要的概念,也是面试中的重点,相信大家在面试中都会碰到这样的几个问题: 1. 请你说说什么是闭包? 2. 请你说说闭包有哪些应用? 3. 请你说说闭包有哪些优缺点? 大家都是怎么回答这几个问题的呢?在网上的文章中对闭包的概念都有不同的说法,导致很多人对闭包没有一个清晰的概念,接下来就和我一起探究什么是闭包。 首先...

weixin_41531446的博客 350

ThingsBoard-阿里云短信规则节点

由于Thingsboard平台国内只支持短信服务,那我们运维人员去及时接收邮箱肯定是没有短信来的方便的,在这基础上,需要自己从规则链入手,自定义一个支持阿里云短信服务的规则节点。

weixin_67440240的博客 2094

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1743

js 点击闭包_JavaScript 闭包的应用

前言面试问题:说一下对变量提升的理解说明this的几种不同的使用场景创建10个<a>标签,点击的时候弹出来对应的序号如何理解作用域实际开发中闭包的应用涉及到的知识点:执行上下文this作用域作用域链闭包执行上下文执行上下文主要有两种情况:全局代码: 一段<script>标签里,有一个全局的执行上下文。所做的事情是:变量定义、函数声明函数代码:每个函数里有一个上下文。所做的事...

weixin_28709649的博客 136

【WorkBuddy从入门到精通实战教程】实战案例 第 41 章 论文阅读与文献综述

本文系统讲解如何用WorkBuddy高效阅读论文并撰写文献综述。针对“读了一天没记住”的痛点,提出“三遍阅读法”:快速评估相关性、结构化提炼核心内容、批判性分析局限。结合提示词工程,实现单篇精读、多篇对比与综述框架搭建,显著提升效率。强调学术诚信,严防AI幻觉,要求所有引用与数据必须回源核对。最终目标是借助AI辅助理解与组织,但坚持自主思考与写作,真正掌握科研能力。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 139

js闭包作用问题解决应用,javascript中闭包的定义

当 JavaScript 引擎在 Foo 作用域中没有找到 a 时,它会首先从 Foo 作用域的父作用域,也就是 Bar 作用域中寻找 a,它确实找到了 a。这里需要注意的是,increase1和increase2是通过不同的函数调用createCounter创建的,它们不共享内存,它们的i是独立的,不同的。If Scope 声明了自己的计数,所以我们在这个作用域中使用的计数就是当前作用域的计数。

2301_79533350的博客 731

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

js 闭包传参_javascript深入理解js闭包

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。一、变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和局部变量。Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。var n=999;function f1(){alert(n);}f1(); // 999另一方面...

weixin_26849971的博客 701

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

javascript深入理解js闭包

javascript深入理解js闭包 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

记事本 3746

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Javascript】Js闭包

同时f2是f1的局部方法,f2在内存中导致f1也始终在内存中。因为f2同样在f1方法内部,所以f1的内部所有变量对f2都是可见的,这时只要把f2作为返回值,我们就可以在f1外部读取到f1的局部变量。注意:f1中局部变量对f2是可见的,但是f2中局部变量对f1则是不可见的。官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

小罗的博客 644

闭包js闭包javaScript闭包es5闭包

es5作用域:全局作用域 + 函数级别作用域 闭包:一个函数内部的函数叫做闭包。相当于函数内部与外界连接的桥梁。 闭包解决的问题:a 帮助函数外部读取函数级别作用域中的变量 而存在。b 变量的值始终保存在内存中。 不能滥用闭包:闭包会使函数中的变量始终保存在内存中,内存消耗大,滥用闭包会对网页性能有影响。 2.7 闭包–解决循环变量问题 2.8 闭包中的this 闭包中的this默认情况下指向window.........

angrynouse的博客 270

js 点击闭包_JavaScript闭包应用介绍

来源 |https://www.zoo.team/article/vue3-jsx本文介绍一下js中的一个重要概念——闭包。其实即便是最初级的前端开发人员,应该都已经接触过它。一、闭包的概念和特性首先看个闭包的例子:function makeFab () { let last = 1, current = 1 return function inner() { [curren...

weixin_39656686的博客 116

js 闭包传参_JavaScript 闭包图文解析

什么是闭包?我们来看看 MDN上的解释:Aclosureis the combination of a function bundled together (enclosed) with references to its surrounding state (thelexical environment). In other words, a closure gives you acce...

weixin_29508487的博客 203

js闭包循环原因_javascript与闭包

定义闭包就是能够读取其他函数内部变量的函数。在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。作用一、 存储变量闭包可以保存外部函数的变量,内部函数保留了对外部函数的活动变量的引用,所以变量不会被释放。可以用在把一些不经常变动计算起来又比较复杂的值保存起来,节省每次的访问时间。示例:f...

weixin_39804329的博客 246

java script 闭包_JavaScript之闭包

第一部分:基本概念我们知道根据作用域链的规则,一个函数是不能访问到在与他同一个作用域内的函数内的内部变量的,如下所示:function foo() {var a = 5;console.log(a);}foo();function bar() {var b = a + 5;console.log(b);}bar();在执行到第二个函数时,由于找不到a,所以会报错: a is not defined...

weixin_39944638的博客 163

【JS】JavaScript中的闭包

在JavaScript中,闭包指的是有权访问另一个函数作用域中的变量的函数;创建闭包最常见的方式就是在一个函数内创建另一个函数。如下例子: function A(propertyName){ return function(object1, object2){ var v1 = object1[propertyName]; va...

aodongni1633的博客 183

js中的闭包到底是什么啊,javascript中闭包的定义

当然,在不使用我们定义的函数的情况下编写程序是可能的——虽然很困难,但也是可能的。“自然”的选择是将这段代码放在一起,形成一个可复用的集合,而这个可复用的集合就是我们所说的函数。在这个简化的示例中,我们创建了一个函数,该函数接收您要显示的标题并返回另一个满足 RenderItem 作为道具接收的函数定义的函数。但是,当您创建解决方案时,了解它们的存在以及它们的实际工作方式会开启新的可能性。这个想法是将您的模块“包装”在一个立即执行的函数中。这是函数创建函数或对象的时候,例如,允许您创建用户对象的函数。

wenangou6 627

javascript闭包_JavaScript闭包教程–带有JS闭包示例代码

javascript闭包Closures – many of you JavaScript devs have probably heard this term before. When I started my journey with JavaScript, I encountered closures often. And I think they're one of the most im...

cumi7754的博客 340

【JS】JavaScript之闭包的详细解释

前言 闭包在js中应用非常广泛,也是极为重要的知识点。刚开始了解闭包时也是云里雾里,花了好长时间才搞明白。下面来详细叙说一下闭包的知识。 一、准备知识 要理解好闭包的概念,我们首先得清楚下面的三个知识点: 作用域(全局变量和局部变量) 链式作用域结构 js垃圾回收机制 1、作用域 变量作用域分为全局变量和局部变量 先看下面一段js代码 var name = '小明' funct...

qq_40060547的博客 320
上一篇: JS对象、包装类
下一篇: JS原型
白马非马啊
博客等级 码龄10年 13粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值