Хорошо, поэтому я не понимаю, почему Firefox говорит, что $ ("# canvas") [0] .getContext ('2d'); не определено. Я выложил его из функции, чтобы вся функция могла получить к ней доступ, но здесь ctx все еще не определен.jQuery- Пожалуйста, объясните мне Закрытие, переменный контекст
(function($) {
// Undefined
var ctx = $('#canvas')[0].getContext("2d");
var x = 150;
var y = 150;
var dx = 2;
var dy = 4;
$(function() {
setInterval(draw, 10);
})
function draw() {
ctx.clearRect(0,0,300,300);
ctx.beginPath();
ctx.arc(x,y,10,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
x+=dx;
y+=dy;
}
})(jQuery);
Однако, когда я передал местоположение CTX неназванного функции, то CTX не определено:
(function($) {
var ctx;
var x = 150;
var y = 150;
var dx = 2;
var dy = 4;
$(function() {
//Not Undefined
ctx = $("#canvas")[0].getContext('2d');
setInterval(draw, 10);
})
function draw() {
ctx.clearRect(0,0,300,300);
ctx.beginPath();
ctx.arc(x,y,10,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
x+=dx;
y+=dy;
}
})(jQuery);
Что случилось с первым кодом? Я имею в виду, что var ctx объявлен сверху. Таким образом, это сделает глобальную переменную. Hmm ошибка, которую я получил, была $ ("# canvas") [0] не определена. Значит, что он не может получить доступ к #canvas .. Почему?
Что говорит Себ правильно. первый из них не работает, потому что в то время, когда вы пытаетесь получить свой объект canvas, он еще не загружен. –
Хотя вы правы в отношении обертывания кода внутри обратного вызова, вы ошибаетесь * в контексте проблемы. Вероятно, проблема заключается в том, что javascript-код запускается до объявления тега canvas. Я продемонстрировал это в своем ответе. – brianpeiris
Спасибо. Я просто экспериментировал с тем, как это работает. Я понимаю это сейчас. – rymn