昨天在做Chrome扩展的时候,又遇到闭包问题了,这样写 function() { } 里面的 i 总是最后一个。
function genRankList(s) {
var obj = JSON.parse(s);
var list = obj.rank.list;
for (i=0; i<list.length; i++) {
var a = document.createElement('a');
rankid = list[i].rankid;
a.setAttribute('rankid', list[i].rankid);
a.setAttribute('rankname', list[i].rankname);
var img = new Image();
img.src = list[i].imgurl.replace("/{size}/","/");
img.className = 'rank_img';
a.appendChild(img);
div_rank.appendChild(a);
a.onclick = function() {
var url = 'http://m.kugou.com/rank/info/?rankid=' + list[i].rankid + '&page=1&json=true'
console.log(url);
get(url);
genSongListRank(rt);
}
}
}
脑壳痛,搜了一下,外部使用闭包 i 才正常。
function genRankList(s) {
var obj = JSON.parse(s);
var list = obj.rank.list;
for (i=0; i<list.length; i++) {
var a = document.createElement('a');
rankid = list[i].rankid;
a.setAttribute('rankid', list[i].rankid);
a.setAttribute('rankname', list[i].rankname);
var img = new Image();
img.src = list[i].imgurl.replace("/{size}/","/");
img.className = 'rank_img';
a.appendChild(img);
div_rank.appendChild(a);
(function(i){
a.onclick = function() {
var url = 'http://m.kugou.com/rank/info/?rankid=' + list[i].rankid + '&page=1&json=true'
console.log(url);
get(url);
genSongListRank(rt);
}
})(i);
}
}
JS特色,还算简单。