我不多说。
先看看代码的两部分:
复制代码代码如下所示:
VaR elems = document.getelementsbytagname(A);
对于(var i = 0;i < elems.length;i++){
警报(一);
艾丽美{我}。addEventListener(听到咔哒声,
功能(e){
E.preventDefault();
警报(我链接# +我);
},假);
}
再看一面:
复制代码代码如下所示:
VaR elems = document.getelementsbytagname(A);
对于(var i = 0;i < elems.length;i++){
(
函数(索引){)
艾丽美{我}。addEventListener(听到咔哒声,功能(e){
E.preventDefault();
警报(我链接# +指数);
},假);
})(一);
}
HTML代码如下所示:
复制代码代码如下所示:
一
一
一
一
一
一
一
一
你可以想象下一段
脚本代码的效果。
如果你能看到效果之间的
区别,那就恭喜你吧。至少我想了很久,才明白了神秘。
是的,你没有错,这是第一段代码,不管你点击哪个链接,输出是我链接8。#
代码的第二部分是您真正想要的结果,那么为什么呢。
请看下面的代码:
复制代码代码如下所示:
VaR elems = document.getelementsbytagname(A);
对于(var i = 0;i < elems.length;i++){
警报(一);
艾丽美{我}。addEventListener(听到咔哒声,功能(e){
E.preventDefault();
警报(我链接# +我);
只有当触发器开始时,请在这里再加一个回调函数。
在这里,我的价值在同一时间结束循环的变化。
},假);
原因是
虽然elems {我}是 / /元素引用在这里
但是在结束后,i中的回调函数一直处于循环状态。
8(elems / /如果长度是8字)
}
复制代码代码如下所示:
VaR elems = document.getelementsbytagname(A);
对于(var i = 0;i < elems.length;i++){
(函数(索引){)
艾丽美{我}。addEventListener(听到咔哒声,功能(e){
E.preventDefault();
警报(我链接# +指数);
},假);
})(一);
但这里不一样。
虽然循环结束后的i 值为8
但在O/内的索引包中,封闭已经真正锁定了现场。
已存储在
内存中。
确切地说,锁在内存中的功能。
}
可能有一些Javascript闭包的知识。
上面的代码,想了很久,记录下来,以防遗忘。