課程
/前端開發
/jQuery
/jQuery源碼解析(架構與依賴模塊)
文中說的把data直接放在元素對象上會引起虛幻引用和全局污染,這個不太好理解,請哪位大神幫忙舉個例子解釋一下?謝謝!
2015-06-25
源自:jQuery源碼解析(架構與依賴模塊) 4-4
正在回答
我理解的是,整個dom也屬于全局,多個js代碼對同一dom節點添加/修改數據可能會互相影響,也就是污染了dom元素這一個全局變量.
循環引用,這里用事件對象的回調函數為例子(取自《javascript高級程序設計》第三版 7.2.3):
function?assignHandler()?{ ??var?ele?=?document.getElementById('someEle'); ??ele.onclick?=?function()?{ ????alert(ele.id); ??} }
這里ele.onclick引用了匿名函數,匿名函數又引用了ele(這里匿名函數實際引用assignHandler的活動對象,assignHandler的活動對象引用ele).因此,這里ele的引用數至少為1.
在IE9之前,由于dom采用的是引用計數的垃圾回收機制,因此這種情況下會導致其占用的內存無法回收,造成內存泄漏.
冒泡?
舉報
由淺入深地剖析jQuery庫的設計與實現,揭開框架背后的秘密
1 回答為什么init作為構造函數可以解決遞歸循環
4 回答寫法一和寫法二 兩種形式會不會因為閉包的緣故導致全局變量駐留內存。
2 回答但deep=true的時候,不是window.$和window.JQuery都失去引用了,JQuery不是報廢了?
5 回答為什么要用setTimeout
4 回答下面的代碼也能實現相同的功能,為何要引入 fn.init 這個東西呢? 好處是什么?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-05-31
我理解的是,整個dom也屬于全局,多個js代碼對同一dom節點添加/修改數據可能會互相影響,也就是污染了dom元素這一個全局變量.
循環引用,這里用事件對象的回調函數為例子(取自《javascript高級程序設計》第三版 7.2.3):
這里ele.onclick引用了匿名函數,匿名函數又引用了ele(這里匿名函數實際引用assignHandler的活動對象,assignHandler的活動對象引用ele).因此,這里ele的引用數至少為1.
在IE9之前,由于dom采用的是引用計數的垃圾回收機制,因此這種情況下會導致其占用的內存無法回收,造成內存泄漏.
2016-03-16
冒泡?