关于闭包、let、var的一个考题

关于闭包、let、var的一个考题

遍历,给每个div添加点击事件,输出值。

 

js:

var声明:

关于闭包、let、var的一个考题

效果:

点击每个div后都打印2。

关于闭包、let、var的一个考题

用户点击前,for循环就已经执行完了,是2,onclick里面拿到的就只有2。

var申明的变量i,作用域不仅在for内部,也在for外部。for之后也能使用这个i

换个写法就懂了:

关于闭包、let、var的一个考题

 

let声明:

关于闭包、let、var的一个考题

效果:

点第一个输出0,第二个输出1。

关于闭包、let、var的一个考题

let的块级作用域,且for中的let变量只对内部有效,每次循环的i都是新的i,不会重复使用。onclick的回调的每个i都是独立的。

 

如果还是var,使用闭包的方式,也能达到变量独立的效果。

关于闭包、let、var的一个考题

效果:

点第一个输出0,第二个输出1。

关于闭包、let、var的一个考题

for循环时i在变化,但是i已传入闭包,即可独立存在。

divs[i]中的i是function(i)传进来的参数,独立的。

换种写法就懂了:

for内部,调用的是个外部的函数,i变成了参数的传递。

关于闭包、let、var的一个考题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpppsf.html