我在javascript中遇到了循环实现,我希望能够明确一些。
module.exports = RoundRobin
function RoundRobin(values) {
this.values = values ? values.slice() : []
this.length = this.values.length
this.position = 0
}
RoundRobin.prototype.next = function() {
if (this.position >= this.length) this.position = 0
return this.values[this.position++]
}
RoundRobin.prototype.add = function(value) {
if (!~this.values.indexOf(value)) {
this.values.push(value)
;++this.length
}
return this
}
RoundRobin.prototype.has = function(value) {
return !!~this.values.indexOf(value)
}
RoundRobin.prototype.remove = function(value) {
var index = this.values.indexOf(value)
if (index == -1) return false
this.values.splice(index, 1)
;--this.length
if (index < this.position) --this.position
return true
}
RoundRobin.prototype.clear = function() {
this.values = []
this.length = 0
this.position = 0
}
&#13;
如果你注意到,他们会做一些陈述 &#34 ;; ++ this.length&#34;,或者类似的东西。
我了解++在财产之前或之后放置的内容。
但是那个分号在++之前做了什么?在声明之后不应该这样吗?
为此实施致js-square-batman。
答案 0 :(得分:1)
使用分号是因为代码的作者没有将终结符放在行上。结束和++
/ --
(他认为)可以被视为前一行表达式的一部分。
因此,为了避免可能的错误,作者将终结符放在它发生的行上。
这通常是
let a;
a = 1;
++a;
这就是作者的表现:
let a
a = 1
;++a // and here it is not necessary...
正如@dfsq正确指出的那样,可以安全地删除分号。这里没有意义。
你可以称这种方法类似于分号贪心:D
无论如何,这只是猜测。猜测的根源在于:
let b = 123
(function() {})()
这是无效代码,因为()
运算符的优先级高于换行符。如果你不定期在行尾添加分号,这是一个正常的问题。这就是为什么这些人习惯了以下原因:
let b = 123
;(function() {})()
这样可以正常使用分号贪婪的人如何使其发挥作用。