new Object()不赋值给变量,会创建对象吧,创建的对象在堆中吧,在栈中占用内存吗?创建的对象的引用计数为0吗?什么时候被回收?没有变量的引用指向创建的对象吧?那么这个对象随时会被回收吗?

解决方案 »

  1.   

    会创建对象,然后进入可回收状态。
    参考立即执行函数 (function(){}){};
      

  2.   

    function Obj() {
        this.elm = document.getElementById('divId');
    }
    Obj.prototype.addEvent = function() {
        var that = this;
        that.elm.onclick = function() {
            alert('elm');
        }
    }
    (new Obj()).addEvent();如果这样,那么那个new出来的Obj的实例还被回收吗?
      

  3.   

    elm 存在,elm.click存在,elm.click依赖Obj,如果垃圾收集器会收集的话,世界大乱。
      

  4.   

    <!DOCTYPE html>
    <html>
    <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
    </script>
    <script>
      function Obj() {
        this.elm = document.getElementById('divId');
    }
    Obj.prototype.addEvent = function() {
        var that = this;
        that.elm.onclick = function() {
            alert('elm');
        }
    }
    $(document).ready(function(){
    (new Obj()).addEvent();
    });
    </script>
    </head>
    <body>
    <div id='divId'>sfsfsfsfsfsf</div>
    </body>
    </html>刚才没运行,现在可以了
      

  5.   

    为什么把function Obj() {
    this.elm = document.getElementById('divId');
    }
    Obj.prototype.addEvent = function() {
    var that = this;
    that.elm.onclick = function() {
    alert('elm');
    }
    }放ready里面不可以?
      

  6.   

    放ready里面不能运行? 如果外面其它地方没调用,就ready里用当然放在ready里更好
      

  7.   

    放ready里面不能运行? 如果外面其它地方没调用,就ready里用当然放在ready里更好<!DOCTYPE html>
    <html>
    <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
    </script>
    <script>
    $(document).ready(function(){
    function Obj() {
    this.elm = document.getElementById('divId');
    }
    Obj.prototype.addEvent = function() {
    var that = this;
    that.elm.onclick = function() {
    alert('elm');
    }
    }
    (new Obj()).addEvent();
    });
    </script>
    </head>
    <body>
    <div id='divId'>sfsfsfsfsfsf</div>
    </body>
    </html>这样不能运行,把function Obj() {
    this.elm = document.getElementById('divId');
    }
    Obj.prototype.addEvent = function() {
    var that = this;
    that.elm.onclick = function() {
    alert('elm');
    }
    }这个放外面就可以了,不知道什么原因
      

  8.   

    };    //这里加上 ";"
    (new Obj()).addEvent();
      

  9.   


    var that = this;
    this就是对象的引用
    把this赋值给that
    而that又因为闭包的关系不会被回收。
    所以new出来的Obj的实例也不会被回收
      

  10.   

    也可以不用括号
    new Obj().addEvent();
      

  11.   

    也可以不用括号
    new Obj().addEvent();作用域链形成时间是什么时候啊,比如里面的函数,当没被调用,外面的函数也没被调用时,里面函数作用域链形成了吗?