function A( ){
var a=10;
var b=20;
function B(  ){
this.f=a;
}
return B;
}
var tt=A(  );
var qq=new tt(  );
alert(qq.f);
==========================================function A( ){
var a=10;
var b=20;
function B(  ){
this.f=a;
}
return B;
}
var qq=new A(  )(  );
alert(qq.f);

为什么上面的可以,下面的不可以,我总感觉等价。

解决方案 »

  1.   


    function A( ){
    var a=10;
    var b=20;
    function B( ){
    this.f=a;
    }
    return B;
    }
    var tt=A( );==>tt=function(){this.f=10}
    var qq=new tt( );==>qq.f=10
    alert(qq.f);
    function A( ){
    var a=10;
    var b=20;
    function B( ){
    this.f=a;
    }
    return B;
    }
    var qq=new A( )( );==>var test=new A();qq=test();
    alert(qq.f);
      

  2.   

    ………………function A( ){
        var a=10;
        var b=20;
        function B( ){
            this.f=a;
        }
        return B;
    }
    var tt=A( );//执行结果为:tt是一个类,构造体:tt=function(){this.f=10}
    var qq=new tt( );//执行结果为:qq为tt的一个实例,属性为:qq.f=10
    alert(qq.f);function A( ){
        var a=10;
        var b=20;
        function B( ){
            this.f=a;
        }
        return B;
    }
    var qq=new A( )( );//分解这行代码
    var test=new A();执行结果为test是一个类,构造体:function(){this.f=10}
    qq=test();//执行一个构造体函数,结果为qq=undefined,假设把B改为 function B(){this.f=a;return 1},那么qq=1,也可以试一下var qq=new(new A())()
    alert(qq.f);