Hola, interesante aporte de ambos, sin embargo anexo una solución que creo que es más sencilla de comprender y cumple con lo requerido:
<canvas width="600" height="400"></canvas>
<script>
let pantalla = document.querySelector("canvas");
let pincel = pantalla.getContext("2d");
pincel.fillStyle="lightgrey";
pincel.fillRect(0,0,600,400);
//FUNCIONES
function disenharCircunferencia(x,y,radio) {
pincel.fillStyle="blue";
pincel.beginPath();
pincel.arc(x,y,radio,0,2*Math.PI);
pincel.fill();
}
function limpiarPantalla() {
pincel.clearRect(0,0,600,400);
}
let x=0;
let sentido=true
function actualizarPantalla() {
limpiarPantalla();
disenharCircunferencia(x,20,10);
if (x<600 && sentido){
x++;
sentido=true;
}
if (x==600){sentido=false}
if (sentido==false){x--;}
if (x==0&&sentido==false){sentido=true;}
}
//ACTIVANDO
setInterval(actualizarPantalla,5);
</script>