2010-12-27 1 views
0

Я пытаюсь сделать холст анимации:JS: Почему эта переменная недоступна для других функций?

var context; 
var meter; 
var pin; 

function init() { 
    var meter = new Image(); 
    var pin = new Image(); 
    var context = document.getElementById('canvas').getContext('2d'); 
    meter.src = 'background.png'; 
    pin.src = 'needle.png'; 
    context.drawImage(meter,0,0); 
    context.translate(275,297); 
    context.save(); 
    setTimeout(startup,500); 
} 

function startup() { 
    var r=2; // set rpm here. 
    var i=r*36-27; 
    var angleInRadians = 3.14159265 * i/180; //converting degree to radian     
    context.rotate(angleInRadians); //rotating by angle 
    context.drawImage(pin,-250,-3); //adjusting pin center at meter center 
    context.restore(); 
} 

Вы можете увидеть сценарий на http://www.kingoslo.com/instruments/

С поджигатель Я получаю ошибку о том, что контекст не определен, что я думаю, что это странно.

Спасибо.

С наилучшими пожеланиями, Marius

ответ

9

Это, вероятно, потому, что вы используете «вар» в функции инициализации(), что делает нового «контекст» локальный переменный эту функцию вместо добавления определения к глобальному один. Поэтому просто отбросьте «var» перед «context» в функции init(), и он должен работать. Вы должны сбросить var перед метром и вывести тоже.

+2

+1. Это называется [scope] (http://en.wikipedia.org/wiki/Scope_%28programming%29) – Cameron

1

Вы определили контекст как локальную переменную в функции init(), поэтому контекстная переменная глобального контекста всегда равна нулю. Измените строку:

var context = document.getElementById('canvas').getContext('2d'); 

в

context = document.getElementById('canvas').getContext('2d'); 
3
var context = document.getElementById('canvas').getContext('2d'); 

Вы объявляя другой локальной переменной context здесь, которая действует только в пределах init. «Внешний» context сохраняет свое значение undefined. Удалите var и назначьте внешнему context.