闭包

IT技术2年前 (2022)更新 IT大王
0

一、作用域

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

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

  • 作用域链:

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

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

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

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

1.全局变量
  • 概念:在全局作用域下的变量,在全局下都可以使用。
  • 如果在函数内部没有声明直接赋值的变量也属于全局变量。
  • 只有浏览器关闭的时,全局变量才会销毁,比较占内存资源。
    • 全局作用域:整个script标签中,或者是一个单独的js文件。
2.局部变量
  • 在局部作用域下变量,即在函数内部的变量就是局部变量,只能在函数内部使用。
  • 函数的形参也可以看做是局部变量。
  • 当我们程序执行完毕时,局部变量就会销毁,比较节约内存资源。
    • 局部作用域(函数作用域):在函数内部就是局部作用域,这个代码的名字(变量)只在函数内部起作用和效果。

二、理解闭包

1.闭包的概念
  • 闭包是指有权访问另外一个函数作用域中的局部变量的函数。声明在一个函数中的函数,叫做闭包函数。而且内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。
2.闭包的特点
  • 让外部访问函数内部变量成为可能。
  • 局部变量会常驻在内存中。
  • 可以避免使用全局变量,防止全局变量污染。
  • 会造成内存泄漏(有一块内存空间被长期占用,而不被释放)。
3.闭包的分析
  • 闭包就是可以创建一个独立的环境,每个闭包里面的环境都是独立的,并且互不干扰。
  • 闭包会发生内存泄漏,每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址。
  • 但当外部函数运行结束甚至销毁时,局部的变量key=value,尽管key被垃圾回收机制给回收了,但是value仍不会被回收,会变成一个自由变量留下引用的指针。
4.闭包的实现案例
  • 利用闭包的方式,输出点击项的索引值

    <ul class="itdwcnwqseo 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="itdwcnwqseo 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>
    
© 版权声明
好牛新坐标 广告
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章