Javascript 如何列出多个JS文件*静态*使用的所有(全局)变量?

Javascript 如何列出多个JS文件*静态*使用的所有(全局)变量?,javascript,Javascript,众所周知,当我们使用var在文件级声明变量时,加载在同一HTML页面中的所有其他JS文件都可以访问该变量。我现在正在尝试将它们转换为ES6。因此,我想消除所有这些变量共享 有很多人建议使用像Object.keys(窗口)这样的代码中查找所有对象。然而,还有很多变量没有在我的脚本中定义,我想静态地进行分析 注意:这不能通过依赖linting工具来报告“未声明的标识符”来实现。例如,下面是用于向名为g的同一全局对象(变量)添加新成员的文件。js加载顺序是文件a,然后是文件b。如您所见,g是一个全局变

众所周知,当我们使用
var
在文件级声明变量时,加载在同一HTML页面中的所有其他JS文件都可以访问该变量。我现在正在尝试将它们转换为ES6。因此,我想消除所有这些变量共享

有很多人建议使用像
Object.keys(窗口)这样的代码中查找所有对象。然而,还有很多变量没有在我的脚本中定义,我想静态地进行分析

注意:这不能通过依赖linting工具来报告“未声明的标识符”来实现。例如,下面是用于向名为
g
的同一全局对象(变量)添加新成员的文件。js加载顺序是文件
a
,然后是文件
b
。如您所见,
g
是一个全局变量。但是,linting工具没有说明哪个全局变量是由多个JS文件共享的

归档

var g;
if(typeof g === 'undefined')
   g = {};
g.something = 1;
文件b

var g;
if(typeof g === 'undefined')
    g = {};
g.hey = 2;
console.log(g.something); // this works

注意:这不能通过遍历
窗口
对象来完成。首先,这不是静态完成的。其次,浏览器中有很多预定义的对象不是继承的——我们不知道它们是否被用户编写的JS文件使用。

@Justastudent不,不是。请看编辑后的文章。我把你的问题理解为:你想找到所有全局声明的变量,因此,
var foo
在函数范围之外。这是linting工具可以做到的,如链接问题中所讨论的。我是不是误解了你的问题?“我真的不明白你的第一句话,你能详细说明一下问题是什么吗?”Justastudent编辑。请看一看。Thanks@GoodGood林廷工具不仅会报告未声明的标识符,还会报告全局范围内已声明的变量。@bergi您能告诉我哪个工具的哪些规则会提供这些信息吗?我一直在努力寻找。然而,我看不到出路。谢谢