先看一道题目:
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的博客: