首页IT科技离散数学闭包是什么意思(闭包)

离散数学闭包是什么意思(闭包)

时间2025-06-14 21:23:11分类IT科技浏览4503
导读:一、作用域 JavaScript作用域:分为全局作用域、局部作用域。变量在某个范围内起作用和效果,目的是为了提高程序的可靠性和减少命名冲突。...

一               、作用域

JavaScript作用域:分为全局作用域                   、局部作用域               。变量在某个范围内起作用和效果               ,目的是为了提高程序的可靠性和减少命名冲突                   。

变量的作用域:根据作用域的不同我们变量分为全局变量和局部变量      。两种变量其主要区别是函数内部可以直接读取全局变量                   ,但是在函数外部无法读取函数内部的局部变量           。

作用域链:

根据内部函数可以访问外部函数变量的这种机制      ,用链式查找决定哪些数据能被内部函数访问           ,就称为作用域链                    。

只要是代码                    ,就至少有一个作用域         。

写在函数内部的局部作用域       。

如果函数中还有函数         ,那么在这个作用域中就又可以诞生一个作用域                     。

1.全局变量 概念:在全局作用域下的变量       ,在全局下都可以使用            。 如果在函数内部没有声明直接赋值的变量也属于全局变量   。 只有浏览器关闭的时                     ,全局变量才会销毁            ,比较占内存资源                     。 全局作用域:整个script标签中   ,或者是一个单独的js文件               。 2.局部变量 在局部作用域下变量                     ,即在函数内部的变量就是局部变量               ,只能在函数内部使用。 函数的形参也可以看做是局部变量                  。 当我们程序执行完毕时,局部变量就会销毁                  ,比较节约内存资源                  。 局部作用域(函数作用域):在函数内部就是局部作用域                  ,这个代码的名字(变量)只在函数内部起作用和效果   。 二      、理解闭包 1.闭包的概念 闭包是指有权访问另外一个函数作用域中的局部变量的函数               。声明在一个函数中的函数   ,叫做闭包函数                   。而且内部函数总是可以访问其所在的外部函数中声明的参数和变量               ,即使在其外部函数被返回(寿命终结)了之后      。 2.闭包的特点 让外部访问函数内部变量成为可能           。 局部变量会常驻在内存中                    。 可以避免使用全局变量                   ,防止全局变量污染         。 会造成内存泄漏(有一块内存空间被长期占用      ,而不被释放)       。 3.闭包的分析 闭包就是可以创建一个独立的环境           ,每个闭包里面的环境都是独立的                    ,并且互不干扰                     。 闭包会发生内存泄漏         ,每次外部函数执行的时候       ,外部函数的引用地址不同                     ,都会重新创建一个新的地址            。 但当外部函数运行结束甚至销毁时            ,局部的变量key=value,尽管key被垃圾回收机制给回收了   ,但是value仍不会被回收                     ,会变成一个自由变量留下引用的指针   。 4.闭包的实现案例

利用闭包的方式               ,输出点击项的索引值

<ul class="closure"> <li>苹果</li> <li>香蕉</li> <li>橘子</li> <li>西瓜</li> </ul> <script> // 获取所有的li元素 let lis = document.querySelectorAll(.closure li) // 利用for循环创建了4个立即执行函数 for (let i = 0; i < lis.length; i++) { (function (i) { lis[i].addEventListener(click, function () { console.log(i) }) })(i) } </script>

利用闭包的方式,3秒钟之后                  ,打印所有li元素的内容

<ul class="closure"> <li>苹果</li> <li>香蕉</li> <li>橘子</li> <li>西瓜</li> </ul> <script> // 获取所有的li元素 let lis = document.querySelectorAll(.closure li) for (let i = 0; i < lis.length; i++) { (function (i) { setTimeout(() => { console.log(lis[i].innerHTML) }, 3000) })(i) } </script>

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
应用程序设定错误100005(设置应用程序在Win11中崩溃怎么办?应用程序在Win11中崩溃解决方法) windows update升级win10(【爬坑之路一】windows系统下更新升级node版本【亲测有效】)