JavaScript闭包

为什么 ChatGPT 生成的下载地址会长成 sky-metal-cards-jerry.quirkypony34.chatgpt.site 这种奇怪的样子 我今天看到的这条地址,确实很容易让人产生一种感觉,ChatGPT 明明只是生成了几张 PNG 图片和一个压缩包,为什么最终拿到的却不是类似这种看起来很正规的下载链接,而是一长串带有、UUID、apidecks的地址。更容易让人疑惑的是,其中还出现了一个平时很少见到的域名。这并不是浏览器随机生成的临时 URL,也不是某个来历不明的第三方文件服务器。根据 OpenAI 在 2026 年公布的 ChatGPT Sites 文档和相关服务条款, 阅读详情

所谓闭包,概念是父函数的执行虽然完成,但是在父函数中嵌套的子函数仍然可以访问父函数的变量的权利。

就像这样:

 <script>
        function father() {
            var i = 10;
            return function () {
                console.log(i);
            }
        }

        father()();
    </script>

打印输出的结果是10。

那么,我们已经对闭包有了初级的认识了,现在,我们再加深一点儿:

 <script>
        function father() {
            var i = 10;
            return function () {
                i++;
                console.log(i);
            }
        }

        var next = father();

        for (var i = 0; i < 5; i++)
        {
            next();
        }
    </script>

这段代码在控制台输出的结果是11,12,13,14,15,由此我们可以得出结论,闭包中的数据是存在一个特定的内存区域的(如果学过C语言的同学,是不是觉得有点儿像static呢?哈哈)

但是,我们这儿如果稍微的改变一下,又是另一种情况。

<script>
        function father() {
            var i = 10;
            return function () {
                i++;
                console.log(i);
            }
        }


        for (var i = 0; i < 5; i++)
        {
            fathr()();
        }
    </script>
结果打印出来的都是11,为什么呢,因为我们每次调用的时候,这次的数据将上一次的数据覆盖掉了,所以打印了5次11。

接下来,我们说一个比较常见的应用场景,

 <script>

        window.onload = function () {

            var aAs = document.getElementsByTagName("a");//在页面上放了5个a以便测试

            for (var i = 0; i < aAs.length; i++)
            {
                aAs[i].onclick = function () {


                    console.log(i);//我们这儿访问的其实是闭包中的数据


                }
            }
        };
    </script>

打印出来的i每一个都是5,道理在何处呢?因为这个时候的i已经成了闭包中的数据。

那么,如果我想要打印出对应的索引该怎么办呢?

只需要稍微的进行修改即可:

 <script>
        window.onload = function () {
            var aAs = document.getElementsByTagName("a");//在页面上放了5个a以便测试

            for (var i = 0; i < aAs.length; i++)
            {

                aAs[i].index = i;//动态的挂载在每个a上面它对应的索引值
                aAs[i].onclick = function () {

                    console.log("我的索引:" + this.index);//通过this取出之前我们挂载的索引值。
                    console.log(i);
                }
            }
        };
    </script>

(这儿其实这种做法有点儿做作,我们其实可以在定义a标签的时候这样写,<a  index="1">点我</a>,然后在循环的时候,通过getAttribute()来取得当前的索引也可以达到同样的效果。我个人在实际的开发中比较喜欢这样做,因为增加自定义属性,并不会影响什么。)

以上我的理解是在参考了一个著名的老师对闭包的讲解所写,对他表示感谢。

如何合法抓取TikTok视频信息和评论:完整Python爬虫教程 尽管TikTok没有开放的公共API来直接抓取视频内容和评论,开发者仍然可以通过合法的方式使用第三方API工具来获取公开数据。无论使用什么工具,都应当严格遵守TikTok的使用条款和当地的隐私法规,确保数据抓取行为符合规定。通过本文介绍的TikTok-Api库和Python技术,你可以合法地抓取公开的视频信息和评论,并进行数据存储与分析。使用这些技术时,务必确保抓取行为不会侵犯用户隐私,并遵守平台的API使用规定。 阅读详情

相关推荐

Aitoearn内容营销的最佳开源 AI 代理,创建 · 发布 · 互动 · 副业一站式平台,支持渠道:抖音、小红书(红点)、微信通道、快手、哔哩哔哩、微信公众号、抖音等等

Aitoearn内容营销的最佳开源 AI 代理,创建 · 发布 · 互动 · 副业一站式平台,支持渠道:抖音、小红书(红点)、微信通道、快手、哔哩哔哩、微信公众号、抖音等等

struggle2025的博客 1751

呜呜呜~我怎么这么弱?????(选值、遛狗、树上博弈题解)

以下是我们7月16号的考题,结果我只得了该得的暴力分,我怎么去考noip??? (附上题解) 1、选值 select.cpp/in/out/1s/256M 【题目描述】 给定n个数,从中选出三个数,使得最大的那个减最小的那个的值小于等于d,问有多少种选法。 【输入格式】 第一行两个整数n,d; 第二行n个整数。数据保证ai单调递增。 【输出格式】 ...

weixin_30612769的博客 204

ResNet与注意力机制:深度学习中的强强联合

本文详细介绍了ResNet和注意力机制的基本原理,并探讨了如何将两者结合,以提升网络的性能。通过在ResNet中引入注意力机制,网络可以自适应地调整特征图的重要性,从而更加关注于关键区域,提升模型的性能。实验结果表明,引入注意力机制后,ResNet的性能得到了显著提升。未来,随着注意力机制的不断发展,我们可以期待更多创新的网络架构和训练方法,进一步提升深度学习模型的性能。

2401_82355416的博客 1783

公园遛狗(小 * 逛公园)

P4513 小白逛公园 线段树求最大子段和,由于是动态的且n,m均高达1e5,因此想到线段树 #include<bits/stdc++.h> using namespace std; #define ll long long const int N=5000010; ll num[N],add[N]; ll n,m; ll max(ll aa,ll bb){ return aa>bb?aa:bb; } struct TREE { ll lx,rx,l,r,sum,ans; }.

fervency(洛谷id)的博客 270

R 分析裂区试验设计

裂区试验有主区部分和副区部分, 因而有主区部分误差(误差 a,简记为Ea )和副区部分误差(误差b,简记为Eb) 分别用于测验主区处理以及副区处理和主、副互作的显著性。对同一个二因素试验资料作自由度和平方和的分解,则可发现随机区组的误差项自由度和平方和分别为DFe、SSe,而裂区设计有两个误差项,其自由度和平方和分别为DFEa,DFEb, SSEa, SSEb。而区组,处理效应等各个变异项目的自由

samhuairen的专栏 8934

告别兼容性困扰:在F-Droid中安全部署Termux的完整指南

本文提供了一份在F-Droid中安全部署Termux的完整指南,旨在彻底解决Android设备上的兼容性困扰。文章详细阐述了为何选择F-Droid而非Google Play商店,并逐步指导用户完成从彻底清理旧版本、安装F-Droid客户端、授予权限到最终安装配置Termux的全过程。指南还涵盖了进阶的稳定性配置、数据迁移方法以及常见问题排查,确保用户获得一个稳定、无冲突的命令行工作环境。

weixin_29224309的博客 946

C++——友元函数与友元类

C++——友元函数与友元类 定义 友元提供了一种 普通函数或者类成员函数 访问另一个类中的私有或保护成员的机制。 优点:可以访问类的私有成员 缺点:破坏了类的封装性 使用场景 当两个类之间深度耦合,A类需要访问B类的私有成员变量此时有以下几种方法 方法一:将B的私有成员变量改为public属性,但这明显不合理,要求是只想让A可以访问到 方法二:给每个成员加一个set和get方法,不好的地方变相的把私有成员变成了公有,set和get的方法代码量也不小 方法三:将A声明为B的友元类 三种方

yxh_1_的博客 253

理解javascript闭包和C++闭包

http://www.jb51.net/article/24101.htm js闭包深入浅出 http://segmentfault.com/a/1190000000652891 js闭包实例 http://www.cnblogs.com/Aion/p/3449756.html 关于C++闭包 在js中闭包是一个难点,其他语言例如C++、C#、java等都有闭包的实现。javascri

踏莎行的博客 2175

Dinic算法的复杂度分析及证明

一般图 复杂度主要取决于dfs增广的过程。 将dfs部分的复杂度分成两部分来分析:1)修改增广路上边的流量。至多会增广mmm次,一条增广路的长度至多是nnn,所以这一部分的复杂度是O(nm)O(nm)O(nm)。2)dfs遍历时找增广路失败时经过的边。由于一旦从某条边出发找最短路失败了,我们就不会再走那条边(当前弧优化),所以这一部分的复杂度是O(m)O(m)O(m)的。故而dfs增广的复杂度是O...

这个博客已经搬到了:zhongyuwei.github.io 4393

软考高级信息系统项目管理师系列论文之:百篇软考高级信息系统项目管理师论文范文

软考高级信息系统项目管理师系列论文之:百篇软考高级信息系统项目管理师论文范文

zhengzaifeidelushang的博客 3581

【JavaScript】一文了解JS的闭包

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

ztK63LrD的博客 4055

基于STM32、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 配置0: 使用内部参考电压(2.5V),增益128,双极性。// 配置通道0: AIN0+和AIN1-,使用配置0和滤波器0。// 100ms采样间隔。// 转换为电压值(使用内部2.5V参考电压)// 构造读命令: 最高位为1表示读,接下来7位是寄存器地址。// 构造写命令: 最高位为0表示写,接下来7位是寄存器地址。// 配置滤波器0: 输出数据率50Hz,后置滤波器4。

corlin6688的博客 529

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

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

m0_59897687的博客 1131

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数学建模模型总结

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

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

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

weixin_41531446的博客 351

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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的博客 251

闭包js闭包javaScript闭包es5闭包

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

angrynouse的博客 270

javascript深入理解js闭包

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

记事本 3746

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

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

2301_79533350的博客 731

【Javascript】Js闭包

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

小罗的博客 644

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

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

weixin_26849971的博客 701

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

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

weixin_39656686的博客 118

js 点击闭包_JavaScript 闭包的应用

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

weixin_28709649的博客 136

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

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之闭包的详细解释

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

qq_40060547的博客 320

js闭包循环原因_javascript与闭包

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

weixin_39804329的博客 246
上一篇: 如何在ASP.NET MVC中使用ajax
下一篇: 品味C#委托之奥秘
遛狗的代码
博客等级 码龄11年 10粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值