Warum wirkt sich eine nicht ausgeführte Auswertung in einigen Browsern auf das Verhalten aus?

Nehmen wir an, ich habe diese beiden Funktionen:

function change(args) {
    args[0] = "changed";
    return " => ";
}
function f(x) {
    return [x, change(f.arguments), x];
}
console.log(f("original"));

In den meisten Browsern außer Opera wird dies zurückgegeben["original", " => ", "original"].

Aber wenn ich das änderef funktionieren sie so,

function f(x) {
    return [x, change(f.arguments), x];
    eval("");
}

es wird zurückkehren["original", " => ", "changed"] in IE9, Safari 5 und Firefox 16 und 17.

Wenn ich ersetzeeval("") mitargumentswird es auch in Chrome ändern.

Sie könnenteste es in deinem eigenen browser auf jsFiddle.

Ich verstehe dieses Verhalten überhaupt nicht. Wie können sich diese Anweisungen auf den Rückgabewert auswirken, wenn die Funktion vor der Ausführung dieser Anweisungen zurückgegeben wird? Auch wenn die Anweisungen ausgeführt würden, warum würden sie sich auf die Mutation der Argumente auswirken?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage