“ this”在节点环境中的行为与浏览器不同

时间:2019-11-14 03:31:18

标签: javascript node.js executioncontext

我正在关注有关thisexecution context的教程。我发现该代码可在Chrome控制台中正常执行:


var globalThis = this

function myFunc () {  
  console.log('globalThis: ', globalThis)
  console.log('this inside: ', this)
  console.log(globalThis === this)
}

myFunc()

// globalThis: Window {...}
// this inside: Window {...}
// true

但是,当我尝试在节点环境中执行相同的代码时,会得到以下响应:

globalThis:  {}

this inside:  { console: [Getter],
  global: [Circular],
  process: 
   process {
     title: 'node',
     version: 'v8.16.2',
     ...

false

我了解全局节点this的值应与浏览器JavaScript this的值不同,但问题是,为什么myFunc's this的值不等于全局值?

1 个答案:

答案 0 :(得分:1)

这是因为节点模块的全局范围是相同的模块,因此,如果在函数之外执行console.log(this),则表示引用的是空模块{}的空模块的全局范围,但是当您在函数console.log(this)中执行相同的this时,将指向全局Node范围(包含您所看到的内容:控制台,全局,进程以及许多其他内容),现在如果您处于严格模式,则函数内部的作用域应为undefined,因为它没有定义默认的本地作用域。

在浏览器中,它的全局作用域是Window对象。