var a=function(){
var b=function(){
alert(b._a)//还在关联
}
b()//undefined
return b
}
var aa=new a
aa._a="aaa"
aa()//好像在aa的作用域中 存在一个b ,弹出aaa

解决方案 »

  1.   


    var a=function(){//a是一个Funtion对象.他的方法返回值也是一个Function对象
        /*代码块开始*/
        var b=function(){ //注意var,他新建了一个变量.并指向一个新的地址;
            alert(b._a)
        }
        /*代码块结束*/
        
        b()//undefined
        return b
    }
    var aa=new a//aa获得一个返回值指针指向新个新建的代码块
    var bb=new a//bb获得一个返回值指针指向新个新建的代码块
    //注意:他们是不同的指向.因为在a中每次都是新建的代码块地址
    aa._a="aaa"//将aa对应地址上新增一属性
    aa()//aaa
    bb()//undefined
      

  2.   

    <script type="text/javascript">
    var b=function(){
    alert(b._a)//还在关联
    }
    var aa=b
    aa._a="aaa"
    aa()//好像在aa的作用域中 存在一个b ,弹出aaa
    b._a="bbb"
    aa()
    </script>
      

  3.   

    你这里和他是不同情况了.
    你的var aa=b
    其实是将aa指向b
    也就是aa和b的实际地址是一样的.而且var b=function(){ }
    是直接新建一个固定的Function对象了.
    也就是b是一直指向Function的.
    而不向LZ中的.b只是方法中的一个临时变量.感觉学过C/C++的会比较好理解吧.
      

  4.   

    他那里虽然是new了
    但他返回了b(一个function)
    这个就跟没有new一样了
    即var aa=a()