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

一个this的问题,浏览器和node的差异

一个this的问题,浏览器和node的差异

哆啦的时光机 2018-10-18 13:11:35
这个问题的代码var fullname = 'John Doe';var obj = {  fullname: 'Colin Ihrig',  prop: {    fullname: 'Aurelio De Rosa',    getFullname: function () {      return this.fullname;    }  },  getFullname () {    return this.fullname;  }};console.log(obj.prop.getFullname());  //Aurelio De Rosaconsole.log(obj.getFullname()); //Colin Ihrigvar test = obj.prop.getFullname;// (这里浏览器 里面是对的, 但是node 这边 是怎么处理了么。。this为global,但是fullname 并没有上global)//当前文件全局的fullname 如果没写var 可以,但是写了var 就是undefinedconsole.log(test());//John Doe上面的注释是我的思路,为什么浏览器 按照我的走了,但是node没有,最后的调用为undefined,是不是模块这边的原因 还是啥的。。。有点没有头绪。。
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

执行 test() 得到 this.fullname(this指向当前的全局变量), 在浏览器var fullname = 'John Doe' ,fullname挂载在window。但在node用var声明是属于局部的模块变量,不加var才是全局变量,或global.fullname也是全局,所以就造成了两个环境下的差距(在node的REPL运行你的代码应该也是和浏览器一样的)。


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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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