为什么我的node.js代码的副作用不起作用

问题描述 投票:0回答:1

我是 NodeJS(版本 v21.6.1)的初学者,我尝试在多个模块中实现代码来理解 JavaScript 中的副作用概念,但代码不起作用,为什么?

// main.js

import './bootstrap.js';

console.log(` >>>>>>>>>>>>>> ${globalThis.someFunctionDep}`);
//  >>>>>>>>>>>>>> undefined

globalThis.someFunctionDep = true;

import './someModule.js';



// bootstrap.js

export default () => {
    globalThis.someFuncitonDep = false;
    console.log("??????????????????");
}




// someModule.js

if (!Object.hasOwn(globalThis, "someFuncitonDep") || !globalThis.someFuncitonDep) {
    throw 'globalThis.someFunctionDep is not set';
}
javascript node.js side-effects
1个回答
0
投票

我认为您期望在代码中达到

import
声明时发生导入。 JavaScript 模块不是这样工作的。相反,模块依赖关系是通过查看互连模块中的所有 import
export
声明来“静态”确定的,然后加载模块并按照生成的模块图的适当顺序执行其代码。模块中的
import
声明与这些模块中的分步代码无关。 您的
main.js
代码在功能上等同于:

import './bootstrap.js'; import './someModule.js'; console.log(` >>>>>>>>>>>>>> ${globalThis.someFunctionDep}`); // >>>>>>>>>>>>>> undefined globalThis.someFunctionDep = true;

...并且 

bootstrap.js
someModule.js

的顶级代码都会在

main.js
的顶级代码之前执行(因为不存在循环关系;当存在循环关系时,情况会变得更加复杂)。
另外,在 
someModule.js

hasOwn

检查中,您将

someFunctionDep
错误拼写为
someFuncitonDep
    

© www.soinside.com 2019 - 2024. All rights reserved.