Nesse código a função está utilizando dados de variaveis fora da função. Isso é específico do javascript? Ou essas variáveis são globais? Porque estou vendo C também e lá a funções só trabalham com dados que estão recebendo no parâmetro. Ah, tbm não entendi muito bem o return false;
var tela=document.querySelector("canvas");
var pincel=tela.getContext("2d");
pincel.fillStyle="grey";
pincel.fillRect(0,0,600,400);
var cor=["blue","red","green"]; <-----<-------------------
var indice=0; <--------------------<------------------------
function desenha(evento){
var cor=["blue","red","green"];
var x=evento.pageX-tela.offsetLeft;
var y=evento.pageY-tela.offsetTop;
pincel.fillStyle=cor[indice]; <----------<-----------
pincel.beginPath();
pincel.arc(x,y,10,0,2*3.14);
pincel.fill();
console.log(x+","+y);
console.log(evento);
}
tela.onclick=desenha;
function mudacor(){
indice++; <------------------------<--------------------
if(indice>=cor.length){
indice=0; <--------------------<--------------------
}
return false; <------------------<--------------
}
tela.oncontextmenu=mudacor;