美文网首页
js循环引用引起的内存泄漏示例

js循环引用引起的内存泄漏示例

作者: 10m每秒滑行 | 来源:发表于2018-03-08 19:34 被阅读0次

    Js中存在和OC同等意义的闭包(block& closure)闭包可看作匿名函数,例如:

    function handle () {
        var element = document.getElementById(“testId”);
        element.onclick = function (){
            alert(element.id)
        }
    }
    

    函数中 给element的onclick属性赋值了一个闭包,闭包要访问element的id属性。闭包在js中也是对象,函数即对象。闭包会持有外部传入的变量,因此闭包持有了element对象,而element对象通过onclick属性持有了闭包,因此两个对象相互持有,造成内存泄漏。

    与OC类比,OC中使用weak对象引用,来解决循环引用的问题,js中也有类似操作,例如:

    function handle () {
        var element = document.getElementById(“testId”);
        var id = element.id;
        element.onclick = function (){
            alert(id);
        }
    }
    

    因为var id是由赋值得到的,js的赋值操作是值或者引用的拷贝,并不持有对象。此时element持有闭包,闭包持有id对象,并未造成循环引用。

    相关文章

      网友评论

          本文标题:js循环引用引起的内存泄漏示例

          本文链接:https://www.haomeiwen.com/subject/afzyfftx.html