Realizado resolução diferente, não ficou tão bom como do professor, mas conseguir chegar ao resultado esperado. Loop circurlo vai e volta
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Desenha Circulo Canvas</title>
</head>
<body>
<canvas width="600" height="400"></canvas>
<script>
var tela = window.document.querySelector("canvas");
var pincel = tela.getContext("2d");
pincel.fillStyle = "#cfcfcf";
pincel.fillRect(0, 0, 600, 400);
function limpaTela() {
pincel.clearRect(0, 0, 600, 400);
}
function desenhaCirculo(x, y, raio) {
pincel.fillStyle = "#0000ff";
pincel.beginPath();
pincel.arc(x, y, raio, 0, 2 * Math.PI);
pincel.fill();
}
var inicioX = 20; // o importante é que seja declarado fora da function atualizaTela.
var fimX = 580; // circulo não chegar no fim do canvas deixei aparecer circulo completo
function atualizaTela() {
if (inicioX <= 580) {
limpaTela();
desenhaCirculo(inicioX, 20, 10);
inicioX++;
} else if (fimX >= 20) {
limpaTela();
desenhaCirculo(fimX, 20, 10);
fimX--;
} else {
inicioX = 20;
desenhaCirculo(inicioX, 20, 10);
fimX = 580;
}
}
setInterval(atualizaTela, 20);
</script>
</body>
</html>