使用ES6的 对象字面量简写语法(object-shorthand), IDEA提示警告
const obj = {
b: 1,
func1: function () {
return obj.b;
},
func2 () {
return obj.b;
}
};
obj.func1();
obj.func2();
Intellij IDEA 2017.1中, func1
没有警告, func2
却提示 Variable might not have been initialized6
, 为什么?
注:
低版本IDEA 也存在问题
JavaScript language version 选择了
ECMAScript 6
Node.js and NPM
选择了 7.7.3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个和 IDE 无关,而是在 JS 中,两种写法的区别。
第一种写法,
func1
是在执行那一行的时候才定义的,而第二种写法是在执行obj的时候就已经定义了的。由于
func2
是在定义obj
的过程中定义的,因此,当执行上下文处于func2
的时候,obj
的定义可能还没有执行完,也就会认为可能找不到obj
谢邀。
并非是IDE的BUG,是写法问题。
你看
func1
与func2
的区别,一个传统写法,一个ES6写法。 而func1其实有一个告警, 说func1没有被使用,所以它里面的告警就没必要提示了,也就是你的疑问,为什么func1没有提示。而为什么func2的obj.b有提示呢? 当前IDE版本对ES6声明函数的方式还不支持检测是否被使用,所以认为func2是合理的,对函数内部进行检测并告警提示。
最后,关于这个提示,说这个变量可能为被声明,建议你还是采纳比较好,这是一种写法习惯上的问题,obj应该使用this去替代。你这种写法相当于外部调用一样。