浏览器:标识符X已被声明

时间:2016-03-21 19:48:33

标签: javascript ecmascript-6

我在我的项目中使用带有Babel的ES6,当我声明我的一个const

时出现错误
'use strict';

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

APP.personalCard = (function () {

   ...

}());

错误

  

未捕获的TypeError:标识符'APP'已被声明

这就是整个文件,我没有在该文件中的任何其他地方声明。但是我已经在其他文件的顶部声明了var。

您认为它应该是什么?

4 个答案:

答案 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

声明时,问题就解决了