闭包问题

闭包问题

具体遇到的问题

在全局函数中,声明一个function函数,函数作用域内console.log(a),a是全局变量,这时产生了闭包吗?函数作用域回永久存在吗>

报错信息的截图

相关课程内容截图

尝试过的解决思路和结果

粘贴全部相关代码,切记添加代码注释(请勿截图)

在这里输入代码
```const a=1;
function fn(){
console.log(a);
}

正在回答

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

5回答

同学你好,根据同学所说,全局函数引用全局变量,是如下情况:

f1中定义了一个变量b,它的值为全局变量a。但是当f1执行完毕,f1函数就销毁了,不会形成闭包。因为局部变量引用全局变量,是局部变量依赖全局变量。局部变量销毁对全局变量不产生任何影响,因为a始终在内存中保存,并没有销毁。f1销毁之后,下次调用f1 ,又会重新创建变量b,并赋值为a。


http://img1.sycdn.imooc.com//climg/5f994b74097f965c02650128.jpg

如何形成闭包,老师在之前问答中反复强调过。遇到代码,自己去套用一下老师之前说的概念,是不是符合闭包的要求哦。

http://class.imooc.com/course/qadetail/260430

祝学习愉快~

好帮手慕星星 2020-10-26 18:36:13

同学你好,不是说所有全局函数作用域不销毁的情况都是属于闭包。闭包简单理解就是函数中返回子函数,只不过闭包中也存在作用域不销毁的情况而已,不要弄混了。

祝学习愉快!

  • 提问者 嗯嗯_ #1
    我看了一些资料,函数的执行上下文在函数执行完之后都会销毁,而函数在执行阶段创建的函数活动对象如果被引用是可以不被销毁的,闭包之所以能访问到之前外层函数的变量,是因给内层函数定义时,内层函数的作用域链中包含了被定义环境中的作用域链,也包含了外层函数的活动对象,这样理解对吗?
    2020-10-27 21:26:10
  • 提问者 嗯嗯_ #2
    虽然我不知道正确答案是什么,但是我知道你说的不太对
    2020-10-28 08:40:41
  • 提问者 嗯嗯_ #3
    如果你有些东西不太清楚,希望不要随便回答,你随便回答一下,会把别人前期积累的知识全部推翻
    2020-10-28 08:45:30
好帮手慕星星 2020-10-26 16:42:29

同学你好,这样理解没有问题。祝学习愉快!

  • 提问者 嗯嗯_ #1
    你确定没问题吗,按照这样的说法,全局函数引用全局变量也会形成闭包
    2020-10-26 16:54:13
好帮手慕星星 2020-10-26 11:15:20

同学你好,问题解答如下:

1、f1在调用后不会消失,因为f1中返回了f2函数,赋值给了全局变量result。result在全局作用域中,f2不会消失,所以f1的作用域也不会消失

2、页面关闭的时候f1作用域会消失

祝学习愉快!

  • 提问者 嗯嗯_ #1
    按照你的说法. 全局函数引用全局变量,函数里的变量不会消失,全局函数的作用域也不会消失,这样理解对吗
    2020-10-26 11:33:37
好帮手慕码 2020-10-15 16:47:56

同学你好,解答如下:

1、这样不是闭包哦;这里举个例子:

http://img1.sycdn.imooc.com//climg/5f880cef0995e2c602390368.jpg

代码中的f2函数,就是闭包。

2、函数的作用域在调用函数的时候产生,在调用完成之后消失。

  • 提问者 嗯嗯_ #1
    老师举的例子,f1也会在调用后消失吗?如果不会,f1为什么不会消失。f1不可能永远不消失,那么它会在什么时候消失(回答一定要清楚)
    2020-10-25 19:55:54
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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