js中this的问题


先看一道题目:

var User = {
count: 1,

getCount: function() {
return this.count;
}
};
console.log(User.getCount());
var func = User.getCount;
console.log(func());

阮一峰博客:this就是函数运行时所在的环境对象,this的指向在函数创建的时候是决定不了的,在调用的时候才能决定(这里es6的箭头函数是个例外),http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html
上面的代码在浏览器和node中,都会输出 1和 undefined,体会下.
我们改造下,在上面代码最前面加入一行:

var count = 2;

执行添加后的代码,浏览器会打印 1 2。node下还是会打印 1 undefined。

可以在getCount方法打印this,在浏览器环境是window,在node环境是global。

node运行环境下,getCount里面的this指向global,var下声明的变量并不在global对象下,导致找不到count变量,打印出undefined。这点和浏览器下var变量在window下是不一样的。

es6的箭头函数的this是定义时所在的对象,是固定的,跟运行环境无关。


关于node下模块是怎么执行的,参见cnode下的讨论帖子https://cnodejs.org/topic/55a86cb908f6814b602ab7ad

找到一篇很详细的关于this的博客:

彻底理解js中this的指向,不必硬背。

原文地址:https://www.cnblogs.com/xiaochongchong/p/9708321.html