所不同的是
counter += st || counter + 1;
装置相同
counter = counter + (st || counter + 1);
而counter = counter + st || counter + 1
装置counter = (counter + st) || (counter + 1)
。
在您的示例代码st
是undefined
,所以每一次,这相当于
counter = counter * 2 + 1;
因此,大跳过循环实际上确实
counter += counter + 1;
。
在另一方面,在
counter = counter + st || counter + 1;
st
是undefined
装置counter + st
是NaN
,该计数为假,因此这有效地运行
这相当于
counter += 1;
但是,这只是偶然的。如果您使用不同的参数,如调用你的函数:
function range(start, end, st) {
var arr = [];
var counter = start;
while (counter <= end) {
arr.push(counter);
counter = counter + st || counter + 1;
}
return arr;
}
console.log(range(-2, 2, 2));
结果是[ -2, -1, 1 ]
,而不是预期[ -2, 0, 2 ]
。
您可以通过执行
counter += st || 1;
,而不是解决您的代码。
可能会有所帮助,如果你展示了它给你什么与你期望的结果 –
因为_operator precedence_。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence – CBroe
@CrayonViolent它假设没有提供'st'因为它将被undefined添加1来计数 – yokimoto