我在我的项目中使用带有Babel的ES6,当我声明我的一个const
'use strict';
const APP = window.APP = window.APP || {};
const _ = window._;
APP.personalCard = (function () {
...
}());
错误
未捕获的TypeError:标识符'APP'已被声明
这就是整个文件,我没有在该文件中的任何其他地方声明。但是我已经在其他文件的顶部声明了var。
您认为它应该是什么?
答案 0 :(得分:16)
但是我已经在其他文件的顶部声明了var。
这就是问题所在。毕竟,这会在同一(全局)范围内对同一个名称进行多次声明 - 这会在const
中引发错误。
相反,请使用var
,在主文件中仅使用一个声明,或仅排除window.APP
。
或者立即使用ES6模块,让模块捆绑器/加载器按照预期处理它们。
答案 1 :(得分:2)
请记住window
是全局命名空间。这两行试图声明相同的变量:
window.APP = { ... }
const APP = window.APP
strict
模式下不允许使用第二个定义(在文件顶部使用'use strict'
启用)。
要解决此问题,只需删除const APP =
声明即可。该变量仍然可以访问,因为它属于全局命名空间。
答案 2 :(得分:2)
我有一个非常接近的问题,但就我而言,是Identifier 'e' has already been declared
。
在我的情况下,是由于使用try {} catch (e) { var e = ... }
导致的,其中字母e
是通过minifier(uglifier)生成的。
因此,更好的解决方案是使用catch(ex){}
(ex
作为Excemption
)
希望搜索类似问题的人可以发现此问题有帮助。
答案 3 :(得分:-1)
当我不使用任何 var,let或const
声明时,问题就解决了