javascript - 使用ES6的 对象字面量简写语法(object-shorthand), IDEA提示警告
怪我咯
怪我咯 2017-04-11 13:06:27
0
2
362

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, 为什么?

注:

  1. 低版本IDEA 也存在问题

  2. JavaScript language version 选择了 ECMAScript 6

  3. Node.js and NPM 选择了 7.7.3

怪我咯
怪我咯

走同样的路,发现不同的人生

Antworte allen(2)
大家讲道理

这个和 IDE 无关,而是在 JS 中,两种写法的区别。

第一种写法,func1 是在执行那一行的时候才定义的,而第二种写法是在执行obj的时候就已经定义了的。

由于 func2 是在定义 obj 的过程中定义的,因此,当执行上下文处于 func2 的时候,obj 的定义可能还没有执行完,也就会认为可能找不到 obj

刘奇

谢邀。

并非是IDE的BUG,是写法问题。

你看func1func2的区别,一个传统写法,一个ES6写法。 而func1其实有一个告警, 说func1没有被使用,所以它里面的告警就没必要提示了,也就是你的疑问,为什么func1没有提示。

而为什么func2的obj.b有提示呢? 当前IDE版本对ES6声明函数的方式还不支持检测是否被使用,所以认为func2是合理的,对函数内部进行检测并告警提示。

最后,关于这个提示,说这个变量可能为被声明,建议你还是采纳比较好,这是一种写法习惯上的问题,obj应该使用this去替代。你这种写法相当于外部调用一样。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage