为什么导入文件可以访问该文件的某些部分,但不能访问未导出的内容?
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
它的作用。
我正在学习 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
它的作用。