falso, nel tuo caso non funziona poichè non hai esplicitato la dichiarazione della variabile globale cOriginariamente inviato da emanueledg
Nell'utilizzo del metodo apply() ho riscontrato un'altra anomalia su IE:
non è possibile definire variabili globali se esistono degli elementi con l'ID uguale al nome della variabile
giusto, è per questo che hai ottenuto lo "strano effetto", perché IE ammette l'accesso agli elementi via ID non solo attraverso il metodo DOM-standard getElementById(), ma anche con window.elementID
Basta definire prima le variabili globali.E' un vero stress perché non solo il metodo è difforme dagli standard, ma perché prevale anche sulla scrittura delle variabili dall'interno di metodi come apply/call.
considerazioni:Esempio:
Chiaramente su FF tutto come ci si aspetta, su IE invece no...codice:<div id="c">div "c"</div> <script type="text/javascript"> var c; function oClass(fn) { this.fn = fn; this.pass = function() { this.fn.apply(window, []); }; } var obj = new oClass(function() { c = "Sono globale!"; }); alert("window.c = " + window.c); obj.pass(); alert("c = " + c); </script>
Era noto questo limite di apply/call su IE?
Se sì, ci sono dei workaround che potete segnalare?
Considera che caricare lo script così potrebbe cagionar problemi di caricamento: usa l' evento onload (o similari) per sicurezza.
In realtà eseguire javascript all' interno di un browser equivale eseguire il codice all' interno di un with(window){...}, per cui le variabili "globali" in realtà son figlie di window.
Usar le variabili globali, oltre che essere un pelo più lento implica quasi certamente un cattivo design del codice

Rispondi quotando