протестируйте ваш код, и единственная ошибка, которую я получил, была
Uncaught TypeError: Cannot set property 'fillStyle' of null
Это потому, что в контексте вы должны использовать 2d вместо 2, после этого все работает хорошо.
Единственное единственноеЧтобы воспроизвести вашу ошибку, используйте файл HTML, который не содержит тега body или, возможно, вы вызываете сценарий перед тегом body в структуре HTML.
Это пример работы.https://jsfiddle.net/v4e0twd5/