我正在关注有关this
和execution 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
的值不等于全局值?>
答案 0 :(得分:1)
这是因为节点模块的全局范围是相同的模块,因此,如果在函数之外执行console.log(this)
,则表示引用的是空模块{}
的空模块的全局范围,但是当您在函数console.log(this)
中执行相同的this
时,将指向全局Node范围(包含您所看到的内容:控制台,全局,进程以及许多其他内容),现在如果您处于严格模式,则函数内部的作用域应为undefined
,因为它没有定义默认的本地作用域。
在浏览器中,它的全局作用域是Window
对象。