请教var和let问题

请教var和let问题

let前面说不能定义相同的产量,for循环不是重复定义了嘛?难道是说不同的块级作用域可以定义相同变量?for循环可以打印1-10,意思说let声明的变量i因为被匿名函数引用了,所以一直存在?

正在回答

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

3回答

同学你好,他们两个是在同一个作用域里面,没有比大小这个概念哦。

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

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

好帮手慕慕子 2019-10-13 19:11:59

同学你好, 可以参考如下对比解释理解

  1. 在for循环中直接使用var声明i,然后在每次循环的时候用 let j 保留的 i 的值,所以在 i 变化的时候,j 并不会变化。而console.log 的是 j,得到每次点击可以获取对应的索引值的效果

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

    点击三个按钮的打印结果

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

  2. 所以直接使用let声明i的效果,等同于在每次执行循环的时候,系统默认在循环内部添加了一句let i = i的代码,这样就可以在每次循环的块级作用域中保存i的值了

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

老师第一次回答可能有些不严谨,给同学造成了困扰, 希望同学能够谅解, 以后老师也会更加严格的要求自己,为同学更好的解答问题

同学结合代码测试一下, 根据代码实现的效果帮助自己更好的去理解哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 意思是for循环生成了2个块级作用域,最大的是for(let i = 1;i <= 10;i++),小的是{let i=i, fn(){} }?
    2019-10-13 19:36:54
好帮手慕慕子 2019-10-13 11:19:37

同学你好, 

  1. 是的, 不同块级作用可以定义同名变量 。 示例:

    (1)如下这种写法,同时在同一作用域下使用let声明同名变量会出现报错

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

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

    (2)在不同的块级作用域下可以使用let声明同名变量, 

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

  2. 理解了前面举的小示例后,我们在来分析为什么for循环中可以直接使用let实现效果

    当我们在使用for 循环的时候,每一次循环都会重新声明一个变量。像for(let i = 0; i < 10; i++); 这样使用时,i 变量声明了10次,只不过每一次循环i 变量只在循环体中使用。 

    简单理解为:  第一次循环的时候, 生成了一个块级作用域,用来保存i的值为0 的, 执行完之后i++变成了1, 这一次循环就结束了。

    然后进行第二次循环,这时重新生成了一个块级作用域, 并重新声明了一个变量i值为1, 依次类推,  直到整个循环结束。

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 比如i=0,生成块级作用域,然后运算i++,i=1,既然i是块级作用域变量,i=1是如何传递到下一个块级作用域的?
    2019-10-13 17:09:35
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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