一天都被雜七雜八的bug和版本發(fā)布纏住,到了自由下來(lái)的時(shí)候已經(jīng)是加班的鐘點(diǎn)了,看到了網(wǎng)友昨天的一個(gè)討論:
function
?buildList(list)?{
???? var ?result? = ?[];
???? for ?( var ?i? = ? 0 ;?i? < ?list.length;?i ++ )?{
???????? var ?item? = ?'item'? + ?list[i];
????????result.push(? function ()?{alert(item? + ?'?'? + ?list[i])}?);
????}
???? return ?result;
}
function ?testList()?{
???? var ?fnlist? = ?buildList([ 1 , 2 , 3 ]);
???? for ?( var ?j? = ? 0 ;?j? < ?fnlist.length;?j ++ )?{
????????fnlist[j]();
????}
}
testList();
???? var ?result? = ?[];
???? for ?( var ?i? = ? 0 ;?i? < ?list.length;?i ++ )?{
???????? var ?item? = ?'item'? + ?list[i];
????????result.push(? function ()?{alert(item? + ?'?'? + ?list[i])}?);
????}
???? return ?result;
}
function ?testList()?{
???? var ?fnlist? = ?buildList([ 1 , 2 , 3 ]);
???? for ?( var ?j? = ? 0 ;?j? < ?fnlist.length;?j ++ )?{
????????fnlist[j]();
????}
}
testList();
按照emu的理解,正確的做法應(yīng)該是這樣:
function?buildList(list)?{
????var?result?=?[];
????for?(var?i?=?0;?i?<?list.length;?i++)?{
????????var?item?=?'item'?+?list[i];
????????result.push(?function(a,b){return?function(){alert(a?+?'?'?+?b)}}(item,?list[i])?);
????}
????return?result;
}
function?testList()?{
????var?fnlist?=?buildList([1,2,3]);
????for?(var?j?=?0;?j?<?fnlist.length;?j++)?{
????????fnlist[j]();
????}
}
testList();
????var?result?=?[];
????for?(var?i?=?0;?i?<?list.length;?i++)?{
????????var?item?=?'item'?+?list[i];
????????result.push(?function(a,b){return?function(){alert(a?+?'?'?+?b)}}(item,?list[i])?);
????}
????return?result;
}
function?testList()?{
????var?fnlist?=?buildList([1,2,3]);
????for?(var?j?=?0;?j?<?fnlist.length;?j++)?{
????????fnlist[j]();
????}
}
testList();
探討的時(shí)候又翻出來(lái)一篇舊帖子,發(fā)現(xiàn)自己當(dāng)年居然還能這樣子玩array:
var?o={length:10,0:"a",1:"b",2:"c",5:"d"};???
alert(Array.prototype.join.call(Array.prototype.reverse.call(o)));
alert(Array.prototype.join.call(Array.prototype.reverse.call(o)));
猜測(cè)構(gòu)造器是必要的,因此getElementsBy...方法返回的集合不能應(yīng)該用上去:
var?o?=?document.getElementsByTagName("body");
alert(o.length)
alert(o[0])
alert(o.constructor)
alert(Array.prototype.join.call(Array.prototype.reverse.call(o)));
alert(o.length)
alert(o[0])
alert(o.constructor)
alert(Array.prototype.join.call(Array.prototype.reverse.call(o)));
關(guān)于call Array的各個(gè)方法的基本條件(有構(gòu)造器、有l(wèi)ength屬性、有0..n屬性)沒(méi)有文檔支持,完全是摸索出來(lái)的,佩服自己一個(gè)
