能不能把这道题for循环出现的问题结合作用域链讲解一下出现的原因

能不能把这道题for循环出现的问题结合作用域链讲解一下出现的原因

for循环里的i为什么就不能每次都执行,跟全局变量与局部变量的概念又有什么关系?

正在回答

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

2回答

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

1、因为局部作用域是函数里面的作用域,用完就会销毁的,而全局变量是不会自动销毁的,它会保留下来:

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

2、和作用域链没有关系,老师在这里给同学举一个简单的例子:

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

这个的结果就是1:

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

当我们调用test函数时,要打印a,但是函数内部没有定义a,所以就会沿着作用域链向上查找,找上一级有没有定义。

作用域建议同学再多听几遍相关视频:https://class.imooc.com/lesson/788#mid=19788

自己认真的思考一下,否则这样是治标不治本的哦,要学会自己进行总结。

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

  • 迷失的小麦 提问者 #1
    我是这样理解的,局部作用域用完就销毁,但是在触发点击事件的时候被局部作用域给使用了,也就是说当a为1的时候被局部作用域给使用了,用完销毁。那按照这种说法,不就是当a在全局作用域发生变化的时候被局部作用域给使用了,用完就毁,还是实现效果了(a的变化产生的效果)
    2019-12-24 14:19:39
  • 好帮手慕粉 回复 提问者 迷失的小麦 #2
    同学你好,销毁的不是for循环里的a,销毁的是函数里面的i,a作为变量传给函数以后,跟函数内部的i就没有关系了。a和i就不是同一个作用域下的变量。如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
    2019-12-24 14:26:23
好帮手慕粉 2019-12-23 18:36:41

同学你好,同学是想问为什么绑定事件以后,不管点击哪个按钮都提示3吗?如果是的话,解答如下:

1、弹出3的原因是因为页面打开的时候,for循环就立马执行了 ,此时循环3次,依次为按钮绑定事件。而count第一次循环值为0 ,第二次循环又重新定义并赋值为1 .....最终赋值的也是2。因为它们都是全局变量。当点击按钮的时候,for循环已经执行结束了,所以拿到的count永远是2(加1为3):
http://img1.sycdn.imooc.com//climg/5e00977c09f6fca309230328.jpg

2、在下面这个正确写法中:

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

定义了一个函数,把事件写在函数中,在循环中调用。函数会形成一个局部作用域,循环3次,函数调用3次。即形成了3个独立的作用域,那么调用函数时,会把当前的i值传递给参数count,所以每一个函数中,通过参数count保存下来当前的i值,这样拿到的值就不一样了。

也就是每循环一次,调用一次函数,传递的这个值,就在调用的这个函数的作用域内有效。i在函数里面是局部变量,每次函数执行完毕都会被销毁,所以每次i的值都不同,最终可以实现效果。

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

  • 提问者 迷失的小麦 #1
    怎么理解局部作用域就可以执行3次,而全局作用域直接执行第三次?这个问题是否和作用域链有关系,如果没有关系请举例讲解下作用域链在哪里能体现和运用?
    2019-12-24 10:33:05
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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