for(var i = 0; i < len; i++ ){ // 使用立即调用的函数表达式,为了获得不同的I值 (function(i){ console.log(i); imgs[i].onmousemove = function(){ console.log(i); // 先将每道门复位 setImgsPos(); // 打开门 for(var j = 1; j <= i; j++){ //imgs[j].style.left = parseInt(imgs[j].style.left,10) - translate + 'px'; imgs[j].style.left = imgs[j].offsetLeft - translate + 'px'; } } })(i); }
在这一章中最后一段执行代码, for循环中套入立即调用匿名函数(function(i))(i);
这里的for循环 是只循环了一遍就获取到了I的不同的值吗?
若我不用匿名函数立即调用直接
for(var i = 0; i < len; i++ ){
imgs[i].onmousemove = function(){
// 先将每道门复位
setImgsPos();
// 打开门
for(var j = 1; j <= i; j++){
//imgs[j].style.left = parseInt(imgs[j].style.left,10) - translate + 'px';
imgs[j].style.left = imgs[j].offsetLeft - translate + 'px';
}
}
}
当鼠标滑动图片 4个图片就同时执行,且获取不到J的值,
我想咨询下 匿名函数立即调用 (function(i))(i); 的原理
代码执行一次就立即调用,来取得不同的i值,避免for循环将所有索引值一次运行完.你可以百度查一下闭包。闭包,闭包
在自执行函数内部锁住当前的i值,防止它被赋值为最终循环完的i值
闭包的知识点还是有点复杂的,我对于匿名函数的简单理解就是 闭包,使用完以后自动释放 不占据大量内存空间。希望有实力的大神能详细讲解