javascript - 一个this的问题,浏览器和node的差异
本文介绍了javascript - 一个this的问题,浏览器和node的差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
这个问题的代码
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,是不是模块这边的原因 还是啥的。。。有点没有头绪。。
解决方案
执行 test() 得到 this.fullname(this指向当前的全局变量), 在浏览器var fullname = 'John Doe' ,fullname挂载在window。但在node用var声明是属于局部的模块变量,不加var才是全局变量,或global.fullname也是全局,所以就造成了两个环境下的差距(在node的REPL运行你的代码应该也是和浏览器一样的)。
这篇关于javascript - 一个this的问题,浏览器和node的差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文