PV
function range(current, end, step = 1) {
if(current && !end) {
end = current;
current = 0;
}
const isStepPositive = current < end;
if(!isStepPositive) {
step = -step
}
return {[Symbol.iterator]: () => ({
next() {
const previous = current;
return (isStepPositive ? current < end : current > end)
? { value: (current = current + step, previous), done: false }
: { done: true };
}
})
}
}