JavaScript系列—for循环,闭包,作用域等

题外话 for循环

一下打印10

 

测试题

<ul>
<li>111111111111111111</li>
<li>222222222222222222</li>
<li>333333333333333333</li>
</ul>

这里写图片描述

不管点哪个li都会弹出3,因为for循环结束的时候,下面的还没有执行,只有去点的时候才会去执行,但是点的时候,for循环已经结束,所以会弹出3。

可以用闭包解决。内部函数可以调用外部函数传进来的参数i,而外部函数执行完毕也不会影响到内部函数。点哪个弹哪个。
这里写图片描述

也可以这样写,因为循环的时候i已经被驻扎在内部了,所以点击的时候取得是放在内存中的i,而不是外面的i
这里写图片描述

测试题

选A

解析:首先转换一下,看起来更清晰

首先setTimeout是一个干扰,可以转化成这个

 

首先理解一下作用域链

运行后

 

 

现在来说闭包

什么是闭包,下面f2就是一个闭包

 

首先写一个例子

 然后在页面中随便点击那个按钮发现都会打印5

其实原因是在我进行点击的时候for循环已经执行完了,onclick相当于一个异步事件。其实按下面这样写会更清晰

现在让他如何变成0,1,2,3,4呢,看下面

 

 

然后我们继续添加代码

分别点击按钮

测试题

答案是

关于垃圾回收机制。当这个作用域中所有的数据都不被调用了,那就要被垃圾回收机制收回

下面就会出现三个1

关于作用域

测试题

 

当我点击页面时,会弹出3个3

换成let

 

会出现0,1,2

测试题

测试题

如何解释上面呢,知乎这个解释的最好

测试题

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值