Sicuramente è una stupidaggine ma mi sta facendo impazzire.

Ho una funzione F che viene chiamata N volte. Prima di questa funzione è dichiarata una variabile globale che viene incrementata ogni volta che si chiama la funzione F.

Dentro la funzione F si crea dinamicamente una tabella html con dei pulsanti e dei link attraverso i metodi document.createElement. uno di questi elementi è un pulsante a cui associo un evento OnClick che richiama una funzione G. Questa funzione G ha come parametro la variabile globale NUMERO. Ecco la sintesi del codice:

Codice PHP:
function g(n) { ... }

var 
numero=1;

function 
f() 

... 
var 
link=document.createElement("A");
link.setAttribute('href','javascript:void(0);');
link.onclick = function() { g(numero); }
link.appendChild(img);
...
numero++;

La funzione F crea correttamente gli N elementi, ogni volta incrementando la variabile NUMERO. Il problema è che quando clicco sull'elemento creato (cioè eseguo l'onclick e quindi eseguo la funzione G) il valore di NUMERO non è quello che aveva mentre veniva invocata la funzione, ma il valore corrente, cioè il valore più alto.

Mi spiego:

1) NUMERO = 1 -> eseguo F -> genero un onclick che richiama G(numero)
2) NUMERO = 2 -> eseguo F -> genero un onclick che richiama G(numero)
3) NUMERO = 3 -> eseguo F -> genero un onclick che richiama G(numero)

io mi aspetto di trovarmi 3 eventi onclick così
elemento 1: onclick="g(1);"
elemento 2: onclick="g(2);"
elemento 3: onclick="g(3);"

invece mi trovo tre eventi così
elemento 1: onclick="g(numero);"
elemento 2: onclick="g(numero);"
elemento 3: onclick="g(numero);"

con il risultato che verrà istanziato sempre il valore attuale di NUMERO, cioè 3:
elemento 1: onclick="g(numero);" -> invoca g(3)
elemento 2: onclick="g(numero);" -> invoca g(3)
elemento 3: onclick="g(numero);" -> invoca g(3)

Quindi: come faccio nella funzione F a scrivere g(x) dove x è il valore attuale di NUMERO, invece che scrivere g(numero)?