为了账号安全,请及时绑定邮箱和手机立即绑定

立即调用函数中 的 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);  的原理


 


正在回答

3 回答

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

0 回复 有任何疑惑可以回复我~
#1

qq_没有名称的昵称_0 提问者

原来如此,闭包还没学,懵懵懂懂的,谢了
2017-10-31 回复 有任何疑惑可以回复我~
#2

_蓝色信仰 回复 qq_没有名称的昵称_0 提问者

学js必知闭包,原型,原型链,js运行环境,...很多,要是不知道这些等于半残。闭包推荐看阮一峰老师说的。简单好懂。
2017-10-31 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信