Originariamente 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
falso, nel tuo caso non funziona poichè non hai esplicitato la dichiarazione della variabile globale c
, perché IE ammette l'accesso agli elementi via ID non solo attraverso il metodo DOM-standard getElementById(), ma anche con window.elementID
giusto, è per questo che hai ottenuto lo "strano effetto"
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.
Basta definire prima le variabili globali.
Esempio:

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>
Chiaramente su FF tutto come ci si aspetta, su IE invece no...
Era noto questo limite di apply/call su IE?
Se sì, ci sono dei workaround che potete segnalare?
considerazioni:
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