为什么这里的变量声明据说是多余的
Why is variable declaration supposedly redundant here
我有这个方法:
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 否则它将是全局的,我在这里错过了什么?
是因为你把k
设置成null
是多余的,用k;
替换了k = null;
,之所以多余是因为你没有对k做任何事情在将值更改为其他值之前。这意味着您可以将 k 设置为任何值,只要您在实际使用它之前(无条件地)更改它,您就会看到此调试消息。
即在 WebStorm 中:
let i = 0, k = null;
for(k of this.lookup.keys()){
if(i === r) {
break;
}
i++;
}
给出:
Variable initializer is redundant
然而,
let i = 0, k;
for(k of this.lookup.keys()){
if(i === r) {
break;
}
i++;
}
一切都很好。
你需要声明它以避免隐式全局,但你不需要初始化它(你不需要给它赋值)。
我猜你的 IDE 已经很好地分析了你的代码,知道 this.lookup.keys()
至少有一个元素,所以 k
永远不会留在 null
,并且有首先分配它 null
毫无意义;尽管我不认为这是有问题的(如果将来 this.lookup
被修改为空并且您希望此函数为 return null
而不是 undefined
怎么办案例.
您的 IDE 也可能认为任何赋值 null
的变量声明语句都是多余的,因为它不区分 null
和 undefined
。不过,这完全是 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) 是这样说的:
我以前见过这样的事情,我很确定你需要声明变量 k 否则它将是全局的,我在这里错过了什么?
是因为你把k
设置成null
是多余的,用k;
替换了k = null;
,之所以多余是因为你没有对k做任何事情在将值更改为其他值之前。这意味着您可以将 k 设置为任何值,只要您在实际使用它之前(无条件地)更改它,您就会看到此调试消息。
即在 WebStorm 中:
let i = 0, k = null;
for(k of this.lookup.keys()){
if(i === r) {
break;
}
i++;
}
给出:
Variable initializer is redundant
然而,
let i = 0, k;
for(k of this.lookup.keys()){
if(i === r) {
break;
}
i++;
}
一切都很好。
你需要声明它以避免隐式全局,但你不需要初始化它(你不需要给它赋值)。
我猜你的 IDE 已经很好地分析了你的代码,知道 this.lookup.keys()
至少有一个元素,所以 k
永远不会留在 null
,并且有首先分配它 null
毫无意义;尽管我不认为这是有问题的(如果将来 this.lookup
被修改为空并且您希望此函数为 return null
而不是 undefined
怎么办案例.
您的 IDE 也可能认为任何赋值 null
的变量声明语句都是多余的,因为它不区分 null
和 undefined
。不过,这完全是 IDE 中的一个错误。