讓我們考慮一下代碼(jQuery的1.7.1):
// "public" each
each: function(callback, args) {
return jQuery.each(this, callback, args);
}
// "local" each
each: function(object, callback, args) {
// [...]
if (args) {
// [ args is for internal use ...]
// A special, fast, case for the most common use of each
} else {
if (isObj) {
for (name in object) {
if (callback.call(object[name], name, object[name]) === false) {
break;
}
}
// [...]
正如你所看到的,callback
被引用和直接使用。沒有複製callback
功能。不過,如果jQuery要複製函數,那麼您建議的解決方法會在 jQuery中產生相同的行爲。
注意:在JavaScript中,函數是對象。一個函數聲明語法的行爲與另一個函數不同,沒有「非理性」原因。唯一的區別是範圍。你的建議的解決方法是使函數一個全球性的,而其他的匿名函數是「本地」的each
呼叫
不合理懷疑是不合理的 – Roest 2012-08-06 07:20:36
嘗試刪除循環中不需要的任何東西,例如「在這裏執行一些沉重的東西」。聲明的變量應該在循環之外。你提到的兩個選項之間沒有太大的區別。 – 2012-08-06 07:25:27
這就是http://jsperf.com/所設計的工具。此外,答案可能會從瀏覽器更改爲瀏覽器! – clee 2012-08-06 07:23:25