我在项目中使用了ES6和Babel,当我声明我的const
之一时,我得到了一个错误
'use strict';
const APP = window.APP = window.APP || {};
const _ = window._;
APP.personalCard = (function () {
...
}());
错误
未捕获类型错误:标识符“APP”已声明
这是整个文件,我没有在文件中的任何其他地方声明。但我已经在其他文件的顶部声明了var。
你认为应该是什么?
我在项目中使用了ES6和Babel,当我声明我的const
之一时,我得到了一个错误
'use strict';
const APP = window.APP = window.APP || {};
const _ = window._;
APP.personalCard = (function () {
...
}());
错误
未捕获类型错误:标识符“APP”已声明
这是整个文件,我没有在文件中的任何其他地方声明。但我已经在其他文件的顶部声明了var。
你认为应该是什么?
5条答案
按热度按时间798qvoo81#
但我已经在其他文件的顶部声明了var。
这就是问题所在。毕竟,这会在同一(全局)作用域中对同一名称进行多个声明,这将引发
const
错误。相反,使用
var
,在主文件中只使用一个声明,或者只以独占方式分配给window.APP
。或者立即使用ES6模块,让您的模块绑定器/加载器按照预期处理它们。
pu3pd22g2#
我有一个非常接近的问题,但在我的情况下,它是
Identifier 'e' has already been declared
。在我的例子中,由于使用了
try {} catch (e) { var e = ... }
,字母e
是通过minifier(uglifier)生成的。因此,更好的解决方案是使用
catch(ex){}
(ex
作为Exception
)希望搜索过类似问题的人能发现这个问题有帮助。
rekjcdws3#
请记住,
window
是全局命名空间。这两行试图声明相同的变量:在
strict
模式下不允许使用第二个定义(在文件顶部使用'use strict'
启用)。要解决此问题,只需删除
const APP =
声明。变量仍然可以访问,因为它属于全局命名空间。fdbelqdn4#
对于使用next的用户。js,并在路由更改后出现js脚本文件问题。
我正在使用自定义文件。js文件。js,要解决
SyntaxError: Identifier 'x' has already been declared
错误,只需在custom-file.js中将const
和let
变量更改为var
。如果你的
<Script src="custom-file.js" />
在下一个。js加载,但在页面导航后不触发。解决方案:
您应该强制文件在页面路由后重新启动。
下一个简单的技巧。js脚本是在URL的末尾添加一个查询字符串。这将迫使Next。js发送一个新请求,迫使文件重新启动。
下面是一个例子:
这是我的解决办法。
将
const
和let
变量改为var
,并使脚本src URL动态希望它也能帮助你。。
2jcobegt5#
在我的例子中,错误是由于双重导入造成的:我在和处都导入了脚本,所以当调用第二个脚本时,变量已经声明了。这是一个简单的错误,但我希望有人发现它有用