Newsgroup: it.comp.lang.javascript
Titolo: Scope resolution

E' possibile (e nel qual caso come) sapere all'interno di una funzione
quali variabili sono presenti nella funzione chiamante? o anche
solamente renderli visibili. Forse mi spiego meglio con un esempio
in una funzione
function saySomething(){
    alert(something);
}
se la chiamo ovviamente richiede che something sia gia' definito quello
che vorrei e' che chiamandola cosi':
function testSaySomthing(){
    var somthing = "hello world";
    saySomething();
}
mi appaia il messaggio "hello world".  e' possibile ottenere questo
risultato? magari con qualche workaround ?
Ciao e Grazie
-- 
Wezzy

Se non ho capito male..cmq..potresti fare cosi:
function saySomething(qualcheccosa){
    alert(qualcheccosa);
}
function testSaySomthing(){
    var something = "hello world";
    saySomething(something);
}
Cioè che serve...lo passi come argomento della funzione.
rob4you

Se non ho capito male..cmq..potresti fare cosi:
function saySomething(qualcheccosa){
    alert(qualcheccosa);
}
function testSaySomthing(){
    var something = "hello world";
    saySomething(something);
}
Oddio..con alert č alquanto inutile...visto che potresti evitare di usare 
tutte ste funzioni per un semplicissimo alert....perņ.....banalmente...in 
generale, ciņ che serve...lo passi come argomento della funzione.
Vero che non era questo ciņ che volevi sapere? :-))
rob4you

> Vero che non era questo ciò che volevi sapere? :-))
eh eh in effetti no :-)
Diciamo che vorrei rendere visibili in automatico all'interno della
funzione le variabili che esistono nel momento in cui viene chiamata la
funzione. Questo perche' vorrei poter riciclare la mia funzione ma non
ho un numero di parametri fissato. Potrei passarli ogni volta come
parametri della funzione ma al crescere del loro numero questo diventa
scomodo.
Ciao
Wezzy

 risultato? magari con qualche workaround ?
 togliere il var, cosě diventa globale.
Oppure passare il valore come parametro (anche se non sai quanti parametri
passargli puoi sempre usare arguments:
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Functions:arguments
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Functions:arguments
Ma in questo modo so solo con quanti argomenti e' stata chiamata la mia
funzione. La questione e' che vorrei che tutte le variabili visibili
all'interno di una funzione (e non posso sapere quali sono perche'
cambiano ogni volta) siano visibili alla mia funzione quando questa
viene invocata.
se ho
function unafunc(){
    var a = 1;
    var b = 2;
    var c = 3;
    miafunc();
}
mia func dovrebbe vedere tutte le variabili. Un po' come se prendessi
il contenuto di miafunc e lo copiassi dove viene invocata cosi' che ha
la stessa visibilita' che c'e' all'interno di unafunc()
-- 
Ciao & Grazie
Fabio

 la stessa visibilita' che c'e' all'interno di unafunc()
Premesso che non ne capisco il motivo, comunque sia potresti risolvere con
Closures, anche se normalmente si cerca di evitarlo. Qua un ottimo
articolo:
 
http://www.jibbering.com/faq/faq_notes/closures.html
 
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 }
Usando arguments, potresti fare qualcosa del genere:
unafunc(){
	miafunc.apply(window,arguments);
}
Non importa definire a priori il numero di argomenti passati, in questo modo
stai chiamando miafunc esattamente con i parametri passati a unafunc,
qualunque essi siano.
Un esempio pratico:
	function miafunc(){
		for (var i=0;i<arguments.length;i++)
			alert(arguments[i]);
 
	}
	function unafunc(){
		miafun.apply(window,arguments);
	}
 
	unafun("a",32);
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 arguments non si ferma certo qui).
Si in effetti forse e' meglio...
La mia idea era quella di farmi dei semplici template da riciclare (un
po' come fa dojo o protowidget) e ho la mia funzione che applica il
template (per ora una semplise sostituzione mi basta).
Cosi' ho la mia funzione render() che applica la sostituzione.
Ora quello che io faccio e' questo
function una_funzione_a_caso(){
   var data = {};
   data.qualcosa = 1;
   data.unalracosa = 2;
   render('template',data);
}
render chiama il template che ha il nome passato (li ho precaricati) e
non fa altro che sostituire a #{qualcosa} il valore 1 e a #{unaltracosa}
il valore 2.
Cosi' facendo funziona volevo vedere se riuscivo ad evitare ogni volta
di dover creare un oggetto data e passarlo.
-- 
Ciao e Grazie
Wezzy

  
Articolo che sembra interessante appena ho un attimo me lo leggo con
calma
-- 
Ciao
Wezzy