问答详情
源自:1-3 实例JS+DOM

立即调用函数中 的 I 的值是如何确定的

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);  的原理


 


提问者:qq_没有名称的昵称_0 2017-10-28 20:29

个回答

  • 兼容并包
    2017-10-30 22:00:36
    已采纳

    代码执行一次就立即调用,来取得不同的i值,避免for循环将所有索引值一次运行完.你可以百度查一下闭包。闭包,闭包

  • 梦落芯城
    2017-11-01 18:47:33

    在自执行函数内部锁住当前的i值,防止它被赋值为最终循环完的i值

  • Web前端工程狮
    2017-10-30 22:16:43

    闭包的知识点还是有点复杂的,我对于匿名函数的简单理解就是 闭包,使用完以后自动释放 不占据大量内存空间。希望有实力的大神能详细讲解