为什么 结果不是 2,3

正在回答 回答被采纳积分+1

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

3回答
好帮手慕慕子 2020-03-16 15:39:30

@"挪威_" 同学你好,因为这里是直接使用test()()这种方式调用函数,函数执行完毕,函数内部的变量就会被销毁。

灰灰老师举得示例是将闭包函数赋值给全局变量,由于全局变量在代码执行过程中是不会被销毁的, 所以闭包函数一直被这个变量引用,函数内部的变量并不会销毁。

同学可以试着理解下,祝学习愉快~

好帮手慕夭夭 2019-10-07 09:51:37

@qq_愿_26 同学你好,只有一种情况可以达到让局部变量不销毁,就是闭包。闭包实现的原理就是,把函数(函数a)内部的子函数(函数b)赋值给全局变量,由于全局变量(变量c)在代码运行的过程中是不会销毁的,所以它使用的值即子函数也就无法销毁 。子函数中使用到的局部变量i,所以这个局部变量就保存下来了哦。可参考如下代码理解

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

另,建议同学复习一下前面的闭包课程,加深理解哦。

https://class.imooc.com/lesson/791#mid=19881

祝学习愉快,望采纳。

  • 挪威_ #1
    老师,这个题目中函数text调用subText方法不也是闭包吗?为什么内部变量就销毁了
    2020-03-16 15:14:28
好帮手慕夭夭 2019-09-19 11:45:12

你好同学,这是因为函数执行完毕,它内部的变量就会销毁,不会保存在内存中。当再次调用函数的时候,又会重新定义并赋值。所以不管调用多少次,结果都是2。

祝学习愉快,望采纳。

  • 那老师请问一下,在什么时候它内部的变量不会销毁?
    2019-10-06 19:01:28
  • 老师在上面回复了哦。
    2019-10-07 10:13:17
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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