全局和内部函数中的`this`

时间:2015-09-24 11:12:28

标签: javascript node.js this

根据this explanation in MDN

  • 在全局上下文中,this引用全局对象
  • 在函数上下文中,如果直接调用该函数,则它再次引用全局对象

然而,以下内容:

var globalThis = this;
function a() {
    console.log(typeof this);
    console.log(typeof globalThis);
    console.log('is this the global object? '+(globalThis===this));
}

a();

...放在文件foo.js中产生:

$ nodejs foo.js 
object
object
is this the global object? false

1 个答案:

答案 0 :(得分:6)

在Node.js中,我们在模块中编写的代码都将包含在函数中。您可以在此detailed answer中详细了解此信息。因此,模块顶层的this将引用该函数的上下文,而不是全局对象。

您实际上可以使用global object来引用实际的全局对象,例如

function a() {
  console.log('is this the global object? ' + (global === this));
}

a();