我有以下几个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
的模块。