Node.js中的全局变量:行为怪异



我有以下几个javascript文件:

const { testFunc2 } = require("./TestFunction");

function home(val){
global.context={};
global.context.val = val;
}
home(3);
testFunc2();
//homeFunction.js

下面是TestFunction.js:

exports.testFunc2=()=>{
console.log(context.val);
}

这段代码打印3作为输出,即使我没有把global放在testFunc2中的context之前。这到底是怎么回事?我的猜测是节点在局部范围内查找名为context的变量,如果无法在局部范围内找到它,则转移到全局范围。对吗?

谢谢!

是的,显式global对象是Node JS特有的特性

它是在Node JS程序中的所有模块之间共享的对象,即使你不觉得你正在积极地做任何事情来导致共享(如你所说)。

如果没有称为context的局部变量,则对context的引用将通过全局context,而您将其写入使用global.context=

在某种程度上,它类似于在浏览器中发生的事情,如果您写入window.xyz,然后导入一个试图读取xyz的模块。

最新更新