浏览器:标识符X已声明

o2gm4chl  于 2022-10-22  发布在  Java
关注(0)|答案(5)|浏览(202)

我在项目中使用了ES6和Babel,当我声明我的const之一时,我得到了一个错误

'use strict';

const APP = window.APP = window.APP || {};
const _ = window._;

APP.personalCard = (function () {

   ...

}());

错误
未捕获类型错误:标识符“APP”已声明
这是整个文件,我没有在文件中的任何其他地方声明。但我已经在其他文件的顶部声明了var。
你认为应该是什么?

798qvoo8

798qvoo81#

但我已经在其他文件的顶部声明了var。
这就是问题所在。毕竟,这会在同一(全局)作用域中对同一名称进行多个声明,这将引发const错误。
相反,使用var,在主文件中只使用一个声明,或者只以独占方式分配给window.APP
或者立即使用ES6模块,让您的模块绑定器/加载器按照预期处理它们。

pu3pd22g

pu3pd22g2#

我有一个非常接近的问题,但在我的情况下,它是Identifier 'e' has already been declared
在我的例子中,由于使用了try {} catch (e) { var e = ... },字母e是通过minifier(uglifier)生成的。
因此,更好的解决方案是使用catch(ex){}ex作为Exception
希望搜索过类似问题的人能发现这个问题有帮助。

rekjcdws

rekjcdws3#

请记住,window是全局命名空间。这两行试图声明相同的变量:

window.APP = { ... }
const APP = window.APP

strict模式下不允许使用第二个定义(在文件顶部使用'use strict'启用)。
要解决此问题,只需删除const APP =声明。变量仍然可以访问,因为它属于全局命名空间。

fdbelqdn

fdbelqdn4#

对于使用next的用户。js,并在路由更改后出现js脚本文件问题。
我正在使用自定义文件。js文件。js,要解决SyntaxError: Identifier 'x' has already been declared错误,只需在custom-file.js中将constlet变量更改为var
如果你的<Script src="custom-file.js" />在下一个。js加载,但在页面导航后不触发。

解决方案:

您应该强制文件在页面路由后重新启动。
下一个简单的技巧。js脚本是在URL的末尾添加一个查询字符串。这将迫使Next。js发送一个新请求,迫使文件重新启动。

下面是一个例子:

<Script async src={`/assets/js/custom-file.js?v=${something-dynamic}`} />

这是我的解决办法。
constlet变量改为var,并使脚本src URL动态
希望它也能帮助你。。

2jcobegt

2jcobegt5#

在我的例子中,错误是由于双重导入造成的:我在和处都导入了脚本,所以当调用第二个脚本时,变量已经声明了。这是一个简单的错误,但我希望有人发现它有用

相关问题