var Cu = function () { this.cc = 10; var call = function () { alert(cc) }; return call; };
var cu =new Cu();
cu();
结果报CC未定义
说明new 的是call 而不是Cu ,这个执行顺序是先执行Cu(),再执行new
如果
var cu = Cu();
cu();
则会打出10
因为在没有new 的时候,this不管写在哪里,都是windows
如果
var Cu = function () { var cc = 10; var call = function () { alert(cc) }; return call; };
var cu =new Cu();
cu();
也会打出10,这就是闭包的作用,反回的function会带上上下文的变更,不管new 不new
如果变为
var Cu = function () { this.cc = 10; var call = function () { alert(this.cc) }; return call; };
var cu = new Cu();
cu();
输出仍然为Undefine
因为两个this.cc不属于同一个