为什么导入文件可以访问该文件的某些部分,但不能访问未导出的内容?

Why can importing a file let some parts of that file be accessed but not things which aren't exported?

我正在学习 React 教程,其中包含一些函数和各种控制台日志语句等的 javascript 文件 A 被导入另一个 javascript 文件 B。

然后在文件 B 中调用了文件 A 中的其中一个函数,但出现错误,但文件 A 中的所有控制台日志语句和其他命令都执行正常。

我想知道为什么文件 A 的某些部分 运行 可以,但函数却不行,导入整个文件实际上不会将该文件中的所有内容都带入文件 B 的范围吗?

例如:

a.js

console.log("hi");

function test1() {
  console.log("test1");
}

b.js

import './a.js';

test1();

...doesn't importing the whole file essentially bring everything in that file into scope for file B?

不,一点也不。您展示的示例模块不导出任何内容,因此其中的所有内容(test1 函数)对于模块来说都是完全私有的。这是模块的主要优点之一:它们为您不想共享的模块细节提供私有范围,并以明确的方式共享您确实想共享的内容。

I wondered why some parts of the file A ran ok but not the functions...

那是因为您导入了模块。即使模块不导入或导出任何内容,它的 top-level 代码仍然是 运行 作为加载过程的一部分(第一次导入)。有些模块纯粹是为它们的 side-effects(它们的 top-level 代码的作用)而设计的。你的例子就是这样;它的副作用是 console.log 它的作用。