javascript - 一个this的问题,浏览器和node的差异
高洛峰
高洛峰 2017-04-11 12:11:06
[JavaScript讨论组]

这个问题的代码

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 Rosa

console.log(obj.getFullname()); //Colin Ihrig

var test = obj.prop.getFullname;

// (这里浏览器 里面是对的, 但是node 这边 是怎么处理了么。。this为global,但是fullname 并没有上global)
//当前文件全局的fullname 如果没写var 可以,但是写了var 就是undefined
console.log(test());//John Doe

上面的注释是我的思路,为什么浏览器 按照我的走了,但是node没有,最后的调用为undefined,是不是模块这边的原因 还是啥的。。。有点没有头绪。。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
阿神

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

PHPz

关于全局var定义的变量,在浏览器上会自动把他变为浏览器window的属性,也就是你可以通过window.x去访问他,但是node可不会有这种情况,你把var去掉才可以定义为全局global的属性

迷茫

如果使用var关键字声明的变量将会保留在本地模块里。这些声明的变量没有附加到global对象里。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号