[]关于闭包的问题

废话不说,上代码
var letterList = ["A","B","C","D"];
for (var z = 0; z < letterList.length; z++){
var letter = new Sprite();
letter.loadImage("../imgs/linkup/" + letterList[z] + ".png", (bg.width / letterList.length) * z, 0, bg.width / letterList.length, bg.height / 2);
Laya.stage.addChild(letter);
letter.on("click", this, (function(para){
console.log("z:"+z+";para:"+para+";letterList[para]:"+letterList[para]);
return function () {
alert("z:"+z+";para:" + para + "I'm letter " + letterList[para]);
};
})(z));
}
控制台结果:
z:0;para:0;letterList[para]:A
z:1;para:1;letterList[para]:B
z:2;para:2;letterList[para]:C

对,你没看错,我也没贴错,就是只出了3个,这是我想问的第一个问题,why?

关键问题来了,点击结果:
z:4;para:3"I'm letter D

请问,为什么结果是D,我是不是闭了个假包?

138*****047

赞同来自:

问题已解决,并不是闭包出了问题,问题出在
letter.loadImage("../imgs/linkup/" + letterList[z] + ".png", (bg.width / letterList.length) * z, 0, bg.width / letterList.length, bg.height / 2);
这一行代码中,我实际是通过Sprite的x,y属性去调整的位置,突然想起教程中讲到的注意事项
x,y调整位置,貌似会从0,0开始一直画到你调整的x,y位置,再加上addChild()的特性,后add在上,所以会盖住先add的Sprite,导致怎么点都是最后一个,不造我酱紫有没有表达清楚。
 
直接说解决方法吧:通过pivot()调整位置(需要注意pivot的x,y与,普通的x,y的坐标轴中心点位置不一样,这个详情可以参考API)
 
换一种理解思路大概就是:pos()调整的x,y相当于用pading去调整元素位置,而pivot()相当于margin去调整元素位置
 
不造底层实现具体是什么样子的,这仅仅是个人理解。

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作