众所周知,当我们使用var
在文件级别声明变量时,可以通过同一HTML页面中加载的所有其他JS文件访问它。我现在正试图将它们转换为ES6。因此,我想消除所有这些变量共享。
有很多人建议在控制台中使用Object.keys( window );
等代码来查找所有代码。但是,我的脚本中还有很多变量没有定义,我想静态地进行这种分析。
注意:这可以通过依靠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
注意:这不能通过遍历window
对象来完成。首先,这不是静态完成的。其次,浏览器有很多预定义的对象没有被继承 - 我们无法知道它们是否被任何用户编写的JS文件使用。