JavaScript node.js模块和功能中“ this”的含义
我有一个JavaScript文件,由加载require
。
// loaded by require()var a = this; // "this" is an empty object
this.anObject = {name:"An object"};
var aFunction = function() {
var innerThis = this; // "this" is node global object
};
aFunction();
(function(anyParameter){
console.log(anyParameter.anObject);
})(
this // "this" is same having anObject. Not "global"
);
我的问题是:this
在var中a=this;
是一个空对象,而this
函数中的语句是node.js全局对象的影子。我知道this
关键字在功能上有所不同,但我不明白为什么先this
不等于全局,而this
在功能上等于全局。
node.js如何注入global
到this
函数范围内,为什么不将其注入模块范围内?
回答:
您必须了解以下一些基本事实才能弄清情况:
在Node模块的顶级代码中,
this
等效于module.exports
。那是您看到的空对象。当您使用
this
一个函数内,价值this
就是重新确定之前, 每个执行 的功能,并且它的值由下式确定 如何 执行该功能。这意味着this
如果调用机制不同(例如aFunction()
vs.aFunction.call(newThis)
vs.emitter.addEventListener("someEvent",aFunction);
等),则完全相同的函数对象的两次调用可能具有不同的值。在您的情况下,aFunction()
在非严格模式下运行this
设置为全局对象的函数。将JavaScript文件
require
作为Node模块时,Node引擎在包装函数内部运行模块代码。该模块包装函数的this
设置为module.exports
。(回想一下,函数可以以任意this
值运行。)
因此,您将获得不同的this
值,因为每个值都this
驻留在不同的函数中:第一个位于Node创建的module-
wrapper函数内部,第二个位于中aFunction
。
以上是 JavaScript node.js模块和功能中“ this”的含义 的全部内容, 来源链接: utcz.com/qa/420919.html