我有这个方法:
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)说:
之前我见过这样的事情,我很确定你需要声明变量k,否则它将是全局的,我在这里缺少什么?
答案 0 :(得分:2)
您需要声明它以避免隐式全局,但您不需要初始化它(您不需要为其赋值)。
我猜你的IDE已经很好地分析了你的代码,知道this.lookup.keys()
至少有一个元素,所以k
永远不会留下null
,并且没有任何意义指定它null
1}}首先;虽然我不认为这有问题(如果将来this.lookup
被修改为空,并且您希望此函数在这种情况下返回null
而不是undefined
。
您的IDE也可能认为分配null
的任何变量声明语句都是多余的,因为它不区分null
和undefined
。但这完全是IDE中的一个错误。
答案 1 :(得分:1)
这是因为您设置为k
到null
的冗余会将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++;
}
一切都很好。