Questa domanda riguarda Javascript nell'ASP classico. Non ha nulla a che fare con Javascript in esecuzione nei browser.Inserimento di oggetti in ambito globale in ASP/Javascript classico
Un costrutto tipico per un modulo JS che è stato progettato per essere riutilizzabili è così:
(function(globalScope) {
... declarations here...
}(this));
Questo consente al codice di essere sintatticamente incapsulato, per consentire controlli nel runtime parser/compilatore . Fornisce anche la gestione dell'ambito, in modo che le vars e le funzioni dichiarate all'interno dei ricci non siano visibili esternamente.
Un'altra costrutto tipico è quello di "esportazione" di un oggetto o una funzione appartenente alla portata interna, alla portata esterna, tramite assegnazione, in questo modo:
(function(globalScope) {
var data = ['Alpha', 'Beta', 'Gamma'];
function helper(a) { .... }
function search(d) { .... }
// "export" a function so it is externally visible
globalScope.searchData = search;
}(this));
// typeof this.searchData == "function"
// typeof this.data == "undefined"
// typeof this.helper == "undefined"
// typeof this.search == "undefined"
Tutto questo è abbastanza tipico.
Quando si utilizza questo tipo di costrutto in ASP classico (attenzione: javascript sul lato server !!) il motore JS si alza. Ottengo un errore 500.
Perché?
Posso usare il costrutto dell'ambito e "esportare" le cose nello scope globale, nel classico ASP?
In un runtime del browser, "questo" restituisce "finestra". In un runtime ASP classico sul lato server, qual è il valore del "questo" globale? È possibile assegnare nuove proprietà a questo "questo"?