Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在react组件外部定义的变量是否被视为全局变量?_Javascript_Reactjs - Fatal编程技术网

Javascript 在react组件外部定义的变量是否被视为全局变量?

Javascript 在react组件外部定义的变量是否被视为全局变量?,javascript,reactjs,Javascript,Reactjs,我知道使用全局变量是一种糟糕的做法。我还知道在javascript中,函数外部定义的变量被认为是全局变量。对于在react组件(无论是功能组件还是类)外部定义的变量也是如此。它看起来是否定的,因为js库中的一些css使用这样的语法,但我不明白为什么它不是全局的。例如: import ... const styles = ... const MyComponent = () => { ... } export default MyComponent 这里的样式是全局变量吗?为什

我知道使用全局变量是一种糟糕的做法。我还知道在javascript中,函数外部定义的变量被认为是全局变量。对于在react组件(无论是功能组件还是类)外部定义的变量也是如此。它看起来是否定的,因为js库中的一些css使用这样的语法,但我不明白为什么它不是全局的。例如:

import ...

const styles = ...

const MyComponent = () => {
   ...
}

export default MyComponent

这里的样式是全局变量吗?为什么或者为什么不?

在React中,就像在许多现代Javascript框架中一样,它们使用脚本模块,对每个脚本进行沙箱处理。这意味着您不能定义全局,除非您专门为
窗口
对象指定了某些内容

const local = {};
window.global = {};
通过将脚本标记的类型设置为
module
,可以定义脚本模块:

<script type="module" src="myscript.js"></script>


您应该会看到react创建的结果HTML包含这些脚本类型。

阅读有关模块的更多信息,但简而言之,您定义了常量
样式,之后将不导出这些样式。因此,除本模块外,您将无法在其他任何地方使用它。@AntoanElenkov谢谢。这也适用于测试文件吗?例如,在jest中,您没有导出任何东西,因此component.test.js文件也是一个模块,或者在任何描述块或任何功能块之外定义的变量(例如,在文件顶部)会被视为全局变量吗?@Isdmt,您的测试函数不会被导出,因为当测试引擎执行它们时,您不会在除此文件之外的任何地方使用它们。如果在函数外部定义变量,则该变量将仅在该文件中可见,而且它不是全局变量,也不存在这样的情况。如果要使用全局变量,可以定义并导出一个全局对象,其中可以指定所有全局数据。但同样,您应该将这个全局对象导入到任何您想使用它的地方。如果不够清楚,我可以用一个例子写一个答案,如果你想让我做,请告诉我。谢谢你的回答。我在上面的评论中问了这个问题,但也想在这个答案下问:这也适用于测试文件吗?例如,在jest中,您没有导出任何内容,因此component.test.js文件也是一个模块,或者在任何描述块或任何功能块(例如在文件顶部)之外定义的变量是否被视为全局变量?