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
测试题
测试题
如何解释上面呢,知乎这个解释的最好
测试题