我在循环之前声明了一个空数组,然后在循环运行时填充该数组。我的代码运行良好,但当我使用StandardJS链接时,它会告诉我,数组永远不会被重新分配,应该被声明为const。如果我这样做了,我就无法向数组中添加值,我的代码也无法工作。这也意味着我不能使用标准--修复,因为它破坏了我的代码。
let primeFactors = []
while (number > 1) {
if (isPrime(divisor)) {
if (number % divisor === 0) {
primeFactors.push(divisor)
number = number / divisor
} else {
divisor++
}
} else {
divisor++
}
}我是不是漏掉了什么?
发布于 2020-07-04 01:05:05
您可以,而且应该使用const。
名称const有点用词不当--它只是说变量一旦声明,就不能重新声明或重新分配--也就是说,它总是指向内存中的同一个对象(或者更普遍地说,它的值总是与第一次创建时相同的值),请参见这篇关于MDN的文章。
但是,请注意,即使将对象声明为const,对象也可以是可变的。仅仅因为primeFactors总是指向同一个数组,并不意味着数组不能增长/收缩/更改。
在我的javascript中,很少有变量是let --我几乎在任何地方都使用const,这使得代码更易于阅读和推理。(我使用let的唯一时间是对每个循环偶尔使用一次,偶尔使用助手算法方法)
因此,linter在技术上是正确的,并且鼓励最佳实践--例如,linter正在保护您不受以下代码的影响,这将导致例如Uncaught TypeError: Cannot read property 'push' of null。
let primeFactors = []
while (number > 1) {
if (isPrime(divisor)) {
if (number % divisor === 0) {
primeFactors.push(divisor)
number = number / divisor
} else {
divisor++
primeFactors = null // There's no reason to do this, but it's theoretically possible!
}
} else {
divisor++
}
}https://stackoverflow.com/questions/62724180
复制相似问题