为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码为什么弹出undefined,求详细注释

这段代码为什么弹出undefined,求详细注释

宝慕林4294392 2018-10-18 18:14:36
var obj ={     a:1,     b:function () {          alert(this.a) }};  var fun =obj.b; fun();还有下面这段代码,为什么会弹两次 var obj ={     a:alert(1),     b:(function(){alert(2);}())  };  var fun =obj.b; fun();只引用obj.b,为什么obj.a也会弹出来
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

this的行为有时候会显得极其诡异,让人感到困惑,但只需要记住 this的值要等到代码真正执行时才能确定
同时this的值具体有以下几种情况:

  1. new 调用时指的是被构造的对象

  2. callapply调用,指向我们指定的对象

  3. 对象调用,如执行obj.b()this指向obj

  4. 默认的,指向全局变量window(相当于执行window.fun())

这样看来,当你执行fun()的时候,以上1,2点均不满足。
第3点,因为this是运行时确定的,而我们执行fun(),等同于windown.fun()(与obj没有任何关系),自然的this指向window,而window没有定义变量a,结果是undefined


查看完整回答
反对 回复 2018-11-26
  • 1 回答
  • 0 关注
  • 696 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号