HighDots Forums  

e le parentesi?

Javascript (Italian) Il linguaggio JavaScript (it.comp.lang.javascript)


Discuss e le parentesi? in the Javascript (Italian) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
abramo
 
Posts: n/a

Default e le parentesi? - 05-27-2008 , 04:19 AM






In risposta da un mio vecchio post su questo ng mi si era fatto un
esempio di questo tipo:

function init(){
// initialize something
}

window.onload = init;

ma....e le parentesi?
Non dovrebbe essere window.onload = init();

Reply With Quote
  #2  
Old   
Davide Consonni
 
Posts: n/a

Default Re: e le parentesi? - 05-27-2008 , 04:24 AM






abramo wrote:

Quote:
window.onload = init;
è giusto, gli stai assegnando la funzione all'evento

--
Davide Consonni


Reply With Quote
  #3  
Old   
ZER0
 
Posts: n/a

Default Re: e le parentesi? - 05-27-2008 , 05:54 AM



On 27 May 2008 08:19:47 GMT, abramo wrote:

Quote:
In risposta da un mio vecchio post su questo ng mi si era fatto un
esempio di questo tipo:

function init(){
// initialize something
}

window.onload = init;

ma....e le parentesi?
Non stai invocando una funzione per farla eseguire; stai facendo
un'assegnazione.

Quote:
Non dovrebbe essere window.onload = init();
No. In questo modo eseguiresti init e assegneresti all'onload il
valore di ritorno della funzione.

Eseguendo quel codice, avresti intuito che c'era qualcosa di non
propriamente corretto. Difatti una cosa del genere:

<script type="text/javascript">
function init(){
document.getElementById("my-button").style.border="1px solid red";
}

window.onload = init();
</script>

<body>
<button id="my-button">my button</button>
</body>

Ti avrebbe generato un errore, perché "my-button" non era ancora
stato definito (init sarebbe stata eseguita immediatamente e non
all'onload della pagina).

--
~ "Non si chiama coraggio se non hai paura."
("Bounce")



Reply With Quote
  #4  
Old   
delphine
 
Posts: n/a

Default Re: e le parentesi? - 05-28-2008 , 12:11 PM



abramo <abramo (AT) abra (DOT) mo> wrote:

Quote:
In risposta da un mio vecchio post su questo ng mi si era fatto un
esempio di questo tipo:

function init(){
// initialize something
}

window.onload = init;

ma....e le parentesi?
Non dovrebbe essere window.onload = init();
avresti ragione se init fosse la seguente:

function init(){
return function(e) {
// initialize something
}
}

window.onload = init();

vediamo se cosi' ti e' piu' chiaro

--
Local candidates only, no relocation


Reply With Quote
  #5  
Old   
abramo
 
Posts: n/a

Default Re: e le parentesi? - 05-29-2008 , 02:54 AM



Il Wed, 28 May 2008 18:11:33 +0200, delphine ha scritto:

Quote:
abramo <abramo (AT) abra (DOT) mo> wrote:

In risposta da un mio vecchio post su questo ng mi si era fatto un
esempio di questo tipo:

function init(){
// initialize something
}

window.onload = init;

ma....e le parentesi?
Non dovrebbe essere window.onload = init();

avresti ragione se init fosse la seguente:

function init(){
return function(e) {
// initialize something
}
}

window.onload = init();

vediamo se cosi' ti e' piu' chiaro
No, piu' chiaro il post di ZERO.


Reply With Quote
  #6  
Old   
ZER0
 
Posts: n/a

Default Re: e le parentesi? - 05-29-2008 , 03:50 AM



On 29 May 2008 06:54:56 GMT, abramo wrote:

[cut]
Quote:
ma....e le parentesi?
Non dovrebbe essere window.onload = init();

avresti ragione se init fosse la seguente:

function init(){
return function(e) {
// initialize something
}
}

No, piu' chiaro il post di ZERO.
Probabilmente perché ti è stata messa un po' troppa carne al fuoco.
Quello che Claudio (delphine) voleva dirti è che se onload vuole un
riferimento a funzione, e se - come abbiamo detto - facendo:

window.onload = init();

Tu non assegni il riferimento a "init", bensì il valore di ritorno;
allora nulla ti vieterebbe di far restituire a "init" una funzione.
Per spiegarmi con un'esempio:

function sayHello(){
alert("Hello");
}

function init(){
// do something
return sayHello;
}

window.onload = init();

Come vedi, init questa volta viene invocata (ci sono le parentesi),
fa qualcosa PRIMA che venga scatenato l'onload della pagina, e poi,
come valore di ritorno, restituisce il riferimento a "sayHello". Il
riferimento, nota che non vi sono le parentesi.
Tale valore di ritorno viene assegnato all'onload. Così facendo, al
caricamento della pagina, vedrai un alert con scritto "Hello".

Certo, avresti avuto quasi il medesimo comportamento facendo:

window.onload = sayHello;

Ma era un esempio didattico per spiegarti il meccanismo. Inoltre, a
volte, può tornarti molto utile.

P.S.
La sintassi usata da Claudio implica le closure e se sei agli inizi
forse ti può creare un po' di confusione; ma appena ti sarai un po'
impratichito ti consiglio di buttarci un occhio.

--
~ Ci siamo fatti una scopata cosi' eccezionale che anche i vicini
hanno fumato una sigaretta.



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.