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

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

时间2025-08-05 01:41:46分类IT科技浏览4743
导读:一、作用域 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
psm off(psoft1.exe – psoft1是什么进程 有什么作用)