Javascript WebStorm似乎正在从js文件导入而不是导出变量
创建文件Javascript WebStorm似乎正在从js文件导入而不是导出变量,javascript,typescript,webstorm,Javascript,Typescript,Webstorm,创建文件ownerId.js hello hello2 const xxx = 2 创建文件some.js const hello = 2; xxx 按住Ctrl键将xxx或hello变量悬停,然后单击,它们将在彼此之间重定向 所以基本上问题是我有一个ts文件和一个随机的js文件。不知何故,TypeScript甚至没有失败,因为某个随机js文件指定了该变量。有什么问题?没有任何导出或导入的文件只是一个脚本,它的所有变量都在全局范围内,所以WebStorm似乎做得很好。不
ownerId.js
hello
hello2
const xxx = 2
创建文件some.js
const hello = 2;
xxx
按住Ctrl键将xxx
或hello
变量悬停,然后单击,它们将在彼此之间重定向
所以基本上问题是我有一个ts文件和一个随机的js文件。不知何故,TypeScript甚至没有失败,因为某个随机js文件指定了该变量。有什么问题?没有任何导出或导入的文件只是一个脚本,它的所有变量都在全局范围内,所以WebStorm似乎做得很好。不,不是这样。要放入全局,您需要执行
window.global=5
。如果从typescript运行脚本,脚本将失败,因为找不到var。如果你说的是真的,我的项目中会有10000个全局变量,所以这完全不是真的。可能是假设它是全局的,因为它是在普通的JavaScript中,但typscript可能会对此有所防范(对typscript不太熟悉)。或者,我知道Ruby mine显示的东西名称相同,因为它不能很好地告诉你的文件包含了什么或没有,斜杠只是为了保证你知道你可以引用的所有可能的东西(如果某些东西出了问题,它使用了错误的东西,这很有用),所以我想在webstorm中可能会有类似的情况。它只是显示相同名称的所有变量。真正重要的不是webstorm是否显示它,而是该值是否是您期望的值(未定义),正如上面提到的@Cerberus,您的变量属于全局范围,因为该文件不被视为模块(没有导出/导入声明)。在浏览器中,顶级作用域是全局作用域。这意味着在浏览器var中,某个东西定义了一个新的全局变量。在Node.js中,这是不同的。顶层范围不是全局范围var Node.js模块中的某些内容将是该模块的本地内容