node.js模块和函数中“ this”的含义

Gokcer Gokdal

我有一个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如何注入globalthis函数范围内,为什么不将其注入模块范围内?

炸药

您必须了解以下一些基本事实才能弄清情况:

  • 在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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

node.js中module.exports =函数的含义

来自分类Dev

node.js代码中回调参数的含义

来自分类Dev

node.js代码中回调参数的含义

来自分类Dev

*在ruby函数中的含义

来自分类Dev

sort()中关键函数的含义和np.argsort()的含义

来自分类Dev

Java中<<和| =的含义

来自分类Dev

包含“ [,”含义的函数参数

来自分类Dev

VueJS中的绑定函数含义

来自分类Dev

Node.JS错误代码的含义?(特别是fs)

来自分类Dev

Node.JS错误代码的含义?(特别是fs)

来自分类Dev

sqlserver 2017 Graph数据库中Node表中GraphId列的含义

来自分类Dev

“ *”和“&”的含义是什么?

来自分类Dev

Git命令-“-”和“-”的含义

来自分类Dev

Haskell语法:{..}和@的含义

来自分类Dev

Perl << =和^ =含义

来自分类Dev

Git命令-“-”和“-”的含义

来自分类Dev

C ++的含义| =和&=

来自分类Dev

Haskell:单行中`|`、`<-` 和`->` 的含义

来自分类Dev

Tomcat中connectionTimeout的含义

来自分类Dev

ReactJS中`()=> {}`的含义

来自分类Dev

_在apply()中的含义

来自分类Dev

类型参数中`::`的含义?

来自分类Dev

awk命令中“ a”的含义?

来自分类Dev

Lisp中@(符号)的含义?

来自分类Dev

ALSA中句号的含义

来自分类Dev

Django中“ NoReverseMatch”的含义

来自分类Dev

SRID在postgis中的含义

来自分类Dev

Grep中“ word”的含义

来自分类Dev

Java语法中::的含义