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