實(shí)際上很多流行的JS庫(kù)都采用這種方式,創(chuàng)建一個(gè)scritp標(biāo)簽,賦予一個(gè)ID后加載腳本(比如YUI get()),加載完并回調(diào)后清除該標(biāo)簽。問(wèn)題在于當(dāng)你清除這些script標(biāo)簽的時(shí)候,瀏覽器僅僅是移除該標(biāo)簽結(jié)點(diǎn)。 代碼如下: var script = document.getElementById('JSONP'); script.parentNode.removeChild(script);
當(dāng)瀏覽器移除這標(biāo)簽結(jié)點(diǎn)后的同時(shí)并沒(méi)對(duì)結(jié)點(diǎn)內(nèi)JavaScript資源的進(jìn)行垃圾回收,這意味著移除標(biāo)簽結(jié)點(diǎn)還不夠,還得手動(dòng)的清除script標(biāo)簽結(jié)點(diǎn)的內(nèi)容: 代碼如下: // Remove any old script tags. var script; while (script = document.getElementById('JSONP')) { script.parentNode.removeChild(script); // 瀏覽器不會(huì)回收這些屬性所指向的對(duì)象. //手動(dòng)刪除它以免內(nèi)存泄漏. for (var prop in script) { delete script[prop]; } }