什么是NodeJS中的“全局”对象
我刚刚this
在NodeJS环境中看到关键字的奇怪行为。我正在用代码列出它们。我已经使用NodeJS
v6.x,用一个JavaScript
文件运行了这些代码。
如下用一行代码进行测试时,无论是否使用该'use strict'
语句,这都指向一个空对象{}
。
console.log(this)
但是,当我在自执行函数中运行语句时,
(function(){ console.log(this);
}());
它正在打印一个非常大的对象。在我看来,环境创建的全局执行上下文对象NodeJS
。
并且在执行带有'use strict'
语句的上述功能时,预期它正在打印undefined
(function(){ 'use strict';
console.log(this);
}());
但是,在使用浏览器时(我仅使用进行了测试Chrome
),前三个示例产生了该window
对象,而最后一个给出了undefined
预期的对象。
浏览器的行为是可以理解的。但是,在的情况NodeJS
下,直到我将其包装在函数中时,它才会创建执行上下文吗?
因此,大多数代码NodeJS
运行时都带有一个空的 object
吗?
回答:
在浏览器中,全局范围是window
对象,而在nodeJS中,模块的全局范围是模块本身,因此,当您在nodeJS模块的全局范围中定义变量时,该变量将在该模块本地。
您可以在
中阅读有关此内容的更多信息,其中指出:
<Object> The global namespace object.
在浏览器中,顶级范围是全局范围。这意味着在浏览器中,如果您位于全局作用域var中,则将定义一个全局变量。在Node.js中,这是不同的。顶级范围不是全局范围;var
Node.js模块内部的某些内容对于该模块而言是本地的。
在您编写的代码中:
console.log(this)
在一个空的js文件(模块)中,它将打印一个{}
引用您的空模块的空对象。console.log(this);
自调用函数中,this
将指向包含了所有常见的NodeJS属性和诸如方法在全球范围内的NodeJS对象require()
,module
,exports
,console
…console.log(this)
在自我调用函数中具有undefined
的情况下,由于在严格模式下自我调用的函数没有默认的本地作用域对象,它将打印。
以上是 什么是NodeJS中的“全局”对象 的全部内容, 来源链接: utcz.com/qa/415050.html