闭包解决作用域的问题

正在回答

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

2回答

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

1.没错,因为后面加括号调用了函数。

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

2.第二个问题与第三个问题参考如下代码和注释理解:

(1)代码顺序执行,当页面打开的时候,for循环立马执行,当i=3时,不符合条件退出循环。而事件不是自动执行的,需要点击按钮才会执行。当你点击按钮的时候,注意前面说i=3 ,所以每一个事件中拿到的i都是3 。

参考如下:

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

(2)当设置一个匿名函数 ,由于函数可以形成一个局部作用域,即循环3次,也就形成了3个不同的作用域。而函数中定义了参数,参数相当于局部变量,所以每一个作用域下拿到的参数值是不同的。

参考如下:

同学的代码中形参和实参的名称都是i,所以容易混淆。为了方便理解,老师把形参的名称改为index。

截图的代码和注释认真理解一下哦http://img1.sycdn.imooc.com/climg/5e18562b095944ef07670869.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 花生香又脆 提问者 #1
    终于理解了,谢谢两位老师详细的解答!感激!
    2020-01-10 22:23:49
好帮手慕言 2020-01-09 18:31:46

同学你好,关于同学的疑问,解答如下:

1、(1)函数嵌套函数,这是闭包的一个结构。在本代码中,外层立即执行函数嵌套里面的事件函数。

(2)函数里的子函数被函数外部一直使用,使子函数无法释放,保持其所在作用域,形成一个封闭的作用域,称之位闭包。

本代码中,子函数给元素li绑定,所以子函数是被元素使用的(这就是被外部使用)无法释放(事件被保存下来了),变量i在事件中使用到了,所以它不能销毁,这样每一个事件都能拿到自己当前作用域下面的i值了。如下图

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

2、第一个i是形参,修改为其他的名字也是可以的。第二个i是实参。可以参考下方修改

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

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 花生香又脆 #1
    老师你好, 1.这个匿名函数写在for循环作用域内,是在for循环开始后进行自我执行吗? 2.作用域的问题实在搞不懂,如果不写这个匿名函数自我执行,直接写函数,为什么for循环是在循环结束后才执行下面的函数操作?我只知道作用域可以让内部的变量访问外部的,不知道为什么作用域会造成这种结果,可以解释一下吗? 3.变量i不被释放可以理解,但是不理解为什么这样就可以解决作用域问题?
    2020-01-10 14:36:23
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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