gpt4 book ai didi

javascript - ;++ 运算符在 ;++this.length 语句中

转载 作者:行者123 更新时间:2023-11-30 20:46:56 26 4
gpt4 key购买 nike

我在 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
}

如果您注意到,有些语句会出现“;++this.length”,或类似的东西。

我理解将++ 放在属性之前或之后的作用。

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

此实现归功于 js-square-batman。

最佳答案

使用分号是因为代码的作者没有在行尾放置终止符,++/--(正如他所想的那样)可能是被视为上一行表达式的一部分。

因此,为了避免可能出现的错误,作者将终止符放在发生错误的行上。

通常是这样

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

这会很好地工作,这就是贪婪分号的人如何让它工作的。

关于javascript - ;++ 运算符在 ;++this.length 语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48610042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com