non posso riportare il codice complessivo da cui è estratta questa funzione perchè è molto lungo ad ogni modo cercherò di essere il più possibile chiaro
codice:
function init()
{
readWords();

var fontSize=200;
var wordWidth=0;
do
{
wordWidth=0;
fontSize-=5;
wordCtx.font=fontSize+"px sans-serif";
for(var i=0;i<txt.length;i++)
{
var w=wordCtx.measureText(txt[i]).width;
if(w>wordWidth) wordWidth=w;
}
} while(wordWidth>cw-50 || fontSize*txt.length > ch-50)

wordCtx.clearRect(0,0,cw,ch);
wordCtx.textAlign="center";
wordCtx.textBaseline="middle";
for(var i=0;i<txt.length;i++)
{
wordCtx.fillText(txt[i],cw/2,ch/2 - fontSize*(txt.length/2-(i+0.5)));
}
}
in questa funzione è scritto un ciclo do...while. notate le variabili wordWidth e fontSize, scritte all'inizio della funzione e poi di nuovo in corrispondenza di do{}(attribuendovi un valore differente). ho provato a modificare questo codice dichiarando e attribuendo valori a fontSize e wordWidth una sola volta: ho provato sia a dichiarale all'inzio della funzione init, sia all'interno di do{}, in ogni caso le due variabili erano passate una sola volta e non due volte come nel codice che ho riportato sopra:
codice:
function init()
{
readWords();

wordWidth=0; 
fontSize=195; 
do
{
wordCtx.font=fontSize+"px sans-serif";
for(var i=0;i<txt.length;i++)
{
var w=wordCtx.measureText(txt[i]).width;
if(w>wordWidth) wordWidth=w;
}
} while(wordWidth>cw-50 || fontSize*txt.length > ch-50)

wordCtx.clearRect(0,0,cw,ch);
wordCtx.textAlign="center";
wordCtx.textBaseline="middle";
for(var i=0;i<txt.length;i++)
{
wordCtx.fillText(txt[i],cw/2,ch/2 - fontSize*(txt.length/2-(i+0.5)));
}
}
oppure così
codice:
function init()
{
readWords();

do
{
wordWidth=0; 
fontSize=195; 
wordCtx.font=fontSize+"px sans-serif";
for(var i=0;i<txt.length;i++)
{
var w=wordCtx.measureText(txt[i]).width;
if(w>wordWidth) wordWidth=w;
}
} while(wordWidth>cw-50 || fontSize*txt.length > ch-50)

wordCtx.clearRect(0,0,cw,ch);
wordCtx.textAlign="center";
wordCtx.textBaseline="middle";
for(var i=0;i<txt.length;i++)
{
wordCtx.fillText(txt[i],cw/2,ch/2 - fontSize*(txt.length/2-(i+0.5)));
}
}
la funzione così passata tuttavia sembra mandare in corto il browser e l'esecuzione di tutto lo script diventa molto più lenta, anzi in chrome non prende luogo il caricamento.
come mai?

mi ha sorpreso questo comportamento: questo porzione di codice e l'intero script non è mia opera, è per questo motivo che lo sto maneggiando e sto cercando di capirlo. ma nella fattispecie mi interessa capire come mai la funzione init e il ciclo do...while prende atto solo quando le due variabili wordWidth e fontSize sono dichiarate come nel primo codice che ho scritto, vale a dire due volte, fuori e dentro il ciclo do/while.