new与闭包解析

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不属于同一个

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,385评论 2 17
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,397评论 1 10
  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 5,617评论 0 6
  • 今天又 可以看电影了,吸引力法则。 还有就是今天早上不用签到。啦啦啦,所以睡了一下懒觉,很开心的呢,哈哈哈 第二个...
    茗煜阅读 923评论 0 0
  • 1有多久没有联系了,她是多么盼望他的出现,可是再多的盼望都无济于事,以己喜的性格,她也不会轻易主动联络。但是她又是...
    宽岭阅读 1,527评论 2 1