为什么变量声明在这里应该是多余的

时间:2018-06-06 04:43:39

标签: javascript node.js webstorm jetbrains-ide

我有这个方法:

  getRandomKey(){
    const r = Math.floor(Math.random()*this.lookup.size);
    let i = 0, k = null;
    for(k of this.lookup.keys()){
      if(i === r) {
        break;
      }
      i++;
    }

    return k;
  }

我的IDE(Webstorm)说:

enter image description here

之前我见过这样的事情,我很确定你需要声明变量k,否则它将是全局的,我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

您需要声明它以避免隐式全局,但您不需要初始化它(您不需要为其赋值)。

我猜你的IDE已经很好地分析了你的代码,知道this.lookup.keys()至少有一个元素,所以k永远不会留下null,并且没有任何意义指定它null 1}}首先;虽然我不认为这有问题(如果将来this.lookup被修改为空,并且您希望此函数在这种情况下返回null而不是undefined

您的IDE也可能认为分配null的任何变量声明语句都是多余的,因为它不区分nullundefined。但这完全是IDE中的一个错误。

答案 1 :(得分:1)

这是因为您设置为knull的冗余会将k = null;替换为k;这是多余的原因是因为您之前没有对k做任何事情将值更改为其他内容。这意味着您可以将k设置为任何内容,只要您在实际使用它之前(无条件地)更改它,您将看到此调试消息。

即。在WebStorm中:

let i = 0, k = null;
for(k of this.lookup.keys()){
      if(i === r) {
        break;
      }
      i++;
    }

给出:

  

变量初始化程序是多余的

然而,

let i = 0, k;
for(k of this.lookup.keys()){
      if(i === r) {
        break;
      }
      i++;
    }

一切都很好。