麻烦老师看一下

麻烦老师看一下

http://img1.sycdn.imooc.com//climg/607f97ac09e1370f06720695.jpg


这道题,前两个弹出框我理解是弹出 hello    hello,world     。跟答案一样,但他后面不是还有g()吗?不是总共弹出3个框吗?为什么后面的g()没有执行?


​答案解析中的“g在使用的时候, greeting()不能释放,所以str一直在内存中,再调用g输出”hello,world”。”这句我理解不了。麻烦老师以另一种话解释一下这句话!谢谢。

正在回答

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

2回答

同学你好,解答如下:

1、此段代码中,只会有两次弹窗。greeting函数加括号执行,将返回值sayHi函数赋值给了变量g,第一次调用g(),弹窗一次,第二次调用g(),弹窗一次。addWorld函数中,只是对str做了拼接,没有alert语句,所以不会弹窗。

2、全局变量在代码运行的过程中是不会销毁的,greeting调用后返回的结果,也就是子函数sayHi赋值给全局变量g,sayHi就不会销毁了,所以sayHi内部用到的局部变量str也就保存到内存中了。执行addWorld函数后, str拼接的结果“hello,world”当第二次调用g()时,就能够拿到内存中的str, 弹出“hello,world”。

祝学习愉快~


  • 丹叔 提问者 #1

    第一次调用g(),addworld=function(){str=str+",world";}不会执行吗?一般变量赋值一个匿名函数不是会自动调用函数吗?还需要addworld()来调用?所以我才理解为第一次调用g(),弹出的是hello,world”。麻烦老师再讲解一下!谢谢啦!

    2021-04-21 13:18:34
好帮手慕言 2021-04-21 15:40:11

同学你好,第一次调用g,其实调用的就是sayHi函数

http://img1.sycdn.imooc.com//climg/607fd615092880ae04720541.jpg

addWorld函数不加括号是不会主动执行的,第一次调用g,会弹出str的值,也就是hello,调用addWorld函数之后,str的值变为hello,world,所以第二次调用g时,弹出str的值为hello,world。


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

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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