alert(i)中i不是局部作用域吗?

alert(i)中i不是局部作用域吗?

# 具体遇到的问题
alert(i)中i应该是局部作用域啊,应该是btns[i]中的i啊,为什么会全是3
# 相关课程内容截图
http://img1.sycdn.imooc.com//climg/5f9a669809653b1304120090.jpg择【代码语言】突出显示

正在回答

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

3回答

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

1、全局的i变量,可以通过window对象访问,例如

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

2、截图中注释理解是可以,因为封装的btnClick函数形参i是局部变量

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

那么在函数作用域中就有了i局部变量,不需要沿着作用域向上找了,所以找到的就是每个函数作用域中对应的i值。所以输出结果为1,2,3 。

祝学习愉快!

提问者 慕粉4184331 2020-10-29 15:01:47

之前有段代码,如下:

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

这个和题目中源代码又有何区别?为何能正常打印123?

是在调用函数的时候内存中又创建了一个局部作用域吗?循环了3创建了三个?如下:

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

好帮手慕星星 2020-10-29 15:01:12

同学你好,alert(i)中i函数在局部作用域中,但是局部作用域中没有i值。可以这样理解:

for循环会先执行完毕,给每一个按钮绑定上了点击事件,例如:

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

当手动执行点击事件的时候,事件执行函数局部作用域中没有i值,btns[i]这里的i已经是固定值了,所以会沿着作用域向外找,找到的就是全局中for循环执行完毕后的i值为3 。所以无论点击哪个按钮弹框为3 。

祝学习愉快!

  • 提问者 慕粉4184331 #1
    老师我又补充了下问题麻烦看下上面
    2020-10-29 15:02:56
  • 提问者 慕粉4184331 #2
    还有在for中用var声明了i,相当于i是全局变量?用window.i也可以进行访问吗?
    2020-10-29 15:06:27
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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