老师 讲一下闭包

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,解答如下:

函数内部的变量被全局中的变量引用,导致函数形成的作用域不会被销毁,就会形成闭包。正常情况下,函数执行完,它形成的作用域就会被销毁(js的机制,记住即可)。但是闭包可以让函数形成的作用域不被销毁,比如下面的例子:

http://img1.sycdn.imooc.com//climg/60cc1323092ec3f304140322.jpg

第一次调用fn时,fn会形成一个作用域,该作用中存在变量age:

http://img1.sycdn.imooc.com//climg/60cc15d209f0468410090370.jpg

而全局变量f的值,是函数fn使用return关键字返回的函数,并且该函数会使用fn中的变量age:

http://img1.sycdn.imooc.com//climg/60cc13ac0996e89705710342.jpg    

http://img1.sycdn.imooc.com//climg/60cc13c3090a34b106830349.jpg

此时全局的变量f,就与fn内的age有了引用关系:

http://img1.sycdn.imooc.com//climg/60cc13e709c59fb105100328.jpg

此时js就不会让fn形成的作用域销毁,因此多次调用f,访问的都是fn()形成的那个作用域中的age(现象就是打印的age值可以递增):

http://img1.sycdn.imooc.com//climg/60cc144209d98ba510430350.jpg

此时fn和fn形成的作用域,以及fn内的变量就称为闭包。

因此,闭包的作用之一就是让我们能够在全局中操作函数内的变量,而它的形式之一就是“函数A嵌套函数B,并返回函数B,同时B中使用A中的变量,然后全局中利用函数B,访问A中的变量”。

关于闭包,暂时了解这么多即可。

祝学习愉快!

  • 帅哥但自卑 提问者 #1

    ou妹砸讲的真不错,懂了

    2022-12-07 23:24:27
  • 帅哥但自卑 提问者 #2

    除了被引用的那个函数内的变量,其余的没被引用的变量会随着函数体代码执行完被销毁吗?

             


    2022-12-08 00:12:10
  • 好帮手慕久久 回复 提问者 帅哥但自卑 #3

    理论上会的。不被引用的变量就相当于无用变量,js的垃圾回收机制会定时销毁无用的变量。

    2022-12-08 09:43:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师