; ++ operator in; ++ this.length statement

时间:2018-02-04 15:59:36

标签: javascript

我在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;
&#13;
&#13;

如果你注意到,他们会做一些陈述 &#34 ;; ++ this.length&#34;,或者类似的东西。

我了解++在财产之前或之后放置的内容。

但是那个分号在++之前做了什么?在声明之后不应该这样吗?

为此实施致js-square-batman。

1 个答案:

答案 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() {})() 

这样可以正常使用分号贪婪的人如何使其发挥作用。