Aggiornamento di applicazioni create in versioni precedenti di JScript
La maggior parte del codice JScript esistente funzionerà correttamente anche con i miglioramenti inclusi in JScript 10.0. Infatti, in JScript 10.0 è garantita la pressoché totale compatibilità con le versioni precedenti. Le nuove funzionalità di JScript 10.0, infatti, interessano aree prima non raggiunte.
Per impostazione predefinita, i programmi JScript 10.0 vengono compilati in modalità veloce. Poiché la modalità veloce comporta alcune restrizioni sui tipi di codice ammessi, i programmi possono essere più efficienti ed essere eseguiti più rapidamente. Tuttavia, alcune funzioni disponibili nelle precedenti versioni non potranno essere utilizzate in modalità veloce. La maggior parte di queste funzionalità, peraltro, non erano compatibili con le applicazioni multithread e producevano codice inefficiente. Per i programmi compilati con il compilatore basato su riga di comando è possibile disattivare la modalità veloce e ottenere la piena compatibilità con le versioni precedenti. Tuttavia, il codice compilato in questo modo viene eseguito più lentamente ed è più soggetto a errori. Non è possibile disattivare la modalità veloce nelle applicazioni ASP.NET perché potrebbero verificarsi problemi di stabilità. Per ulteriori informazioni vedere /fast.
Modalità veloce
In modalità veloce, il funzionamento di JScript è il seguente:
Tutte le variabili devono essere dichiarate.
Le funzioni diventano costanti.
Non è possibile dotare oggetti intrinseci di proprietà expando.
Non è possibile elencare o modificare le proprietà di oggetti intrinseci.
L'oggetto arguments non è disponibile.
Non è possibile assegnare un valore a una variabile, a un campo o a un metodo in sola lettura.
Non è possibile utilizzare il metodo eval per definire identificatori nell'ambito che li contiene.
Tutte le variabili devono essere dichiarate
Nelle precedenti versioni di JScript non era necessario dichiarare in modo esplicito le variabili. Per quanto questa funzionalità preservi le sequenze di tasti inserite dai programmatori, rende tuttavia difficoltosa la tracciatura degli errori. Sarebbe, ad esempio, possibile assegnare un valore a un nome di variabile digitato in modo errato senza che venisse generato un errore né restituito il risultato desiderato. Inoltre, poiché le variabili non dichiarate hanno ambito globale, potrebbe derivarne ulteriore confusione.
Per l'utilizzo della modalità veloce è richiesta la dichiarazione esplicita delle variabili. In questo modo è possibile evitare i tipi di errori menzionati sopra e produrre codice di più rapida esecuzione.
In JScript .NET è anche supportata l'annotazione del tipo delle variabili. Ogni variabile viene associata a un tipo di dati particolare e può così memorizzare solo dati di quel tipo. Per quanto non obbligatorio, l'utilizzo dell'annotazione di tipo previene gli errori associati alla memorizzazione accidentale di dati errati in una variabile e può velocizzare l'esecuzione dei programmi.
Per ulteriori informazioni vedere Variabili e costanti JScript.
Le funzioni diventano costanti
Nelle precedenti versioni di JScript, le funzioni dichiarate mediante l'istruzione function erano considerate come variabili che contengono un oggetto Function. In particolare, ogni identificatore di funzione poteva essere utilizzato come variabile per la memorizzazione di qualsiasi tipo di dati.
Quando utilizzate in modalità veloce, le funzioni diventano costanti. Pertanto, non è possibile assegnare loro nuovi valori né ridefinirle. Si tratta di un principio che impedisce la modifica accidentale del significato di una funzione.
Se lo script richiede la modifica di una data funzione, è possibile utilizzare in modo esplicito una variabile per contenere un'istanza dell'oggetto Function. Tuttavia, gli oggetti Function sono lenti. Per ulteriori informazioni, vedere Oggetto Function.
Non è possibile dotare oggetti intrinseci di proprietà expando
Nelle versioni precedenti di JScript era consentita l'aggiunta di proprietà expando a oggetti intrinseci. Questo comportamento poteva, ad esempio, essere utilizzato per aggiungere un metodo a un oggetto String per rimuovere gli spazi iniziali di una stringa.
Nella modalità veloce questa operazione non è consentita. Pertanto, se lo script si basa su tale funzionalità, dovrà essere modificato. È possibile definire funzioni nell'ambito globale invece di collegare queste funzioni a oggetti come metodi. Quindi, è necessario riscrivere ogni istanza nello script in cui un metodo expando viene chiamato dall'oggetto in modo che questo venga passato alla funzione appropriata.
Un'eccezione rilevante a questa regola è rappresentata dall'oggetto Global, che può continuare a disporre di proprietà expando. Tutti gli identificatori presenti nell'ambito globale sono in effetti proprietà dell'oggetto Global. Ovviamente, è necessario che l'oggetto Global possa essere esteso in modo dinamico per supportare l'aggiunta di nuove variabili globali.
Non è possibile elencare o modificare le proprietà di oggetti intrinseci
Nelle versioni precedenti di JScript era consentita l'eliminazione, l'enumerazione o la scrittura di proprietà predefinite di oggetti intrinseci. Questo comportamento poteva, ad esempio, essere utilizzato per modificare il metodo predefinito toString dell'oggetto Date.
Nella modalità veloce questa operazione non è consentita. Questa funzionalità non è più necessaria perché gli oggetti intrinseci non dispongono di proprietà expando. Le proprietà di ciascun oggetto sono elencate nella sezione relativa ai riferimenti. Per ulteriori informazioni, vedere Oggetti.
L'oggetto arguments non è disponibile
Dato che nelle precedenti versioni di JScript era possibile inserire un oggetto arguments all'interno di definizioni di funzioni, queste potevano accettare un numero arbitrario di argomenti. L'oggetto arguments forniva anche un riferimento alla funzione corrente oltre che alla funzione chiamante.
Nella modalità veloce l'oggetto arguments non è disponibile. Tuttavia, in JScript 10.0 è consentito dichiarare funzioni per specificare una matrice di parametri nell'elenco dei parametri della funzione. In questo modo una funzione può accettare un numero arbitrario di argomenti, sostituendo parte delle funzionalità dell'oggetto arguments. Per ulteriori informazioni, vedere Istruzione function.
In modalità veloce non è possibile accedere e fare riferimento in modo diretto alla funzione corrente o alla funzione chiamante.
Non è possibile assegnare un valore a una variabile, a un campo o a un metodo in sola lettura
In apparenza, nelle precedenti versioni di JScript, le istruzioni potevano assegnare un valore a un identificatore in sola lettura. L'assegnazione automaticamente aveva esito negativo e l'unico modo per rilevare l'errore di assegnazione consisteva nel verificare se il valore fosse effettivamente cambiato. L'assegnazione di un valore a un identificatore in sola lettura è solitamente il risultato di un errore, dal momento che non produce alcun effetto.
In modalità veloce, se si tenta di assegnare un valore a un identificatore in sola lettura verrà generato un errore in fase di compilazione. È possibile eliminare l'assegnazione o tentare di assegnare il valore a un identificatore che non sia in sola lettura.
Se si disattiva la modalità veloce, le assegnazioni a identificatori in sola lettura avranno automaticamente esito negativo in fase di esecuzione, ma verrà generato un avviso in fase di compilazione.
Non è possibile utilizzare il metodo eval per definire identificatori nell'ambito che li contiene
Nelle precedenti versioni di JScript era possibile definire funzioni e variabili nell'ambito locale o globale tramite una chiamata al metodo eval.
In modalità veloce è possibile definire funzioni e variabili senza una chiamata al metodo eval, ma quelle saranno accessibili all'interno della particolare chiamata. Una volta eseguito il metodo eval, le funzioni e le variabili con esso definite non saranno più accessibili. Il risultato di un calcolo effettuato mediante un metodo eval può essere assegnato a qualsiasi variabile accessibile nell'ambito corrente. Le chiamate al metodo eval sono lente e potrebbe essere opportuno riscrivere il codice in cui sono contenute.
Quando viene disattivata la modalità veloce, viene ripristinato il comportamento precedente del metodo eval.
Vedere anche
Riferimenti
Concetti
Introduzione a JScript 10.0 per i programmatori JScript