Вы звоните drawRectangle()
до запуска init
.Он использует глобальные переменные, как и ожидалось, но они все еще не инициализированы.Переместите вызов в функцию init
:
var c;
var ctx;
function init() {
alert("1");
c = document.getElementById("can");
ctx = c.getContext("2d");
drawRectangle();
// ^^^^^^^^^^^^^^^^
}
function drawRectangle() {
alert("2");
ctx.fillStyle = "green";
ctx.fillRect(50, 50, 200, 100);
}
window.onload = init;
После этого вы можете (и должны) избегать глобальных переменных и просто передавать необходимые значения по аргументу:
function init() {
var c = document.getElementById("can");
var ctx = c.getContext("2d");
drawRectangle(ctx);
// ^^^
}
function drawRectangle(ctx) {
// ^^^
ctx.fillStyle = "green";
ctx.fillRect(50, 50, 200, 100);
}
window.onload = init;