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

问题描述 投票:2回答:1

我正在跟有关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的值不等于全局值?

javascript node.js executioncontext
1个回答
1
投票

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

在全局范围是Window对象的浏览器中,它要简单得多。

© www.soinside.com 2019 - 2024. All rights reserved.