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

wlp8pajw  于 2023-04-11  发布在  Node.js
关注(0)|答案(1)|浏览(131)

我有下面几个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作为输出,即使我没有在testFunc 2中将global放在context之前。这实际上是如何工作的?我的猜测是node在局部范围内查找一个名为context的变量,如果它无法找到它,它将移动到全局范围。这是正确的吗?
谢谢!

hgb9j2n6

hgb9j2n61#

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

它是一个在Node JS程序中的所有模块之间共享的对象,即使你不觉得你正在积极地做任何事情来引起共享(正如你所说的)。
如果没有名为context的局部变量,则对context的引用福尔斯到全局变量context,该变量是使用global.context=写入的。
在某种程度上,这类似于在浏览器中写入window.xyz,然后导入一个试图读取xyz的模块。

相关问题