我在http://ejohn.org/apps/learn/#19緩存函數的返回結果從約翰Resig的學習先進的JavaScript
來自約翰Resig的鍛鍊#19這個功能的幾個問題什麼是倒數第二行的目的
getElements.cache = {};
是它將return results
存儲在數組中?如果我在(1)中的猜測是正確的,那麼它僅捕獲
return results
,因爲在函數的「else」部分中,getElements.cache[name] = results;
?當我在教程中使用控制檯中的代碼玩遊戲時,我從「else」部分刪除了行
getElements.cache[name] = results
,但仍然得到了與當時的結果相同的結果 - 即告訴我:有76個元素。因此,如果沒有必要得到結果,這條線的目的是什麼?getElements.cache[name] = results
?是有這樣的事實,該功能的「其他」部分中,該行
getElements.cache[name] = results;
的順序從代碼的if
部分,它說:results = getElements.cache[name]
終於扭轉任何意義,是
cache
在JavaScript中的預定義函數?我無法在文檔中找到它。
function getElements(name) {
var results;
if (getElements.cache[name]) {
results = getElements.cache[name];
} else {
results = document.getElementsByTagName(name);
getElements.cache[name] = results;
}
return results;
}
getElements.cache = {};
log("Elements found: ", getElements("pre").length);
非常感謝你。 (d)哪一個正在將結果存儲到緩存中?以及哪一個將結果從緩存中提取出來?關於(e),這個定製屬性是在某處「後臺」定義的嗎?即我看不到任何創建此屬性的代碼。 – mjmitche 2011-03-17 01:51:12
d帶有「result = getElements.cache [name]」的if語句正在複製緩存中的值。關於(e),參見(a)。這是定義。 – Myles 2011-03-17 01:59:44
爲什麼初始化該屬性不是必須的?(from a))如果你不這樣做,你不能使用'getElements.cache [name]',因爲該函數還沒有'cache'屬性。但我認爲只需使用'getElements [name]'就可以省略緩存屬性。 – Gnijuohz 2012-08-06 07:07:59