Dlaczego niewykonany eval ma wpływ na zachowanie w niektórych przeglądarkach?

Załóżmy, że mam te dwie funkcje:

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

W większości przeglądarek, z wyjątkiem Opery, zwraca to["original", " => ", "original"].

Ale jeśli zmienięf działają w ten sposób,

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

wróci["original", " => ", "changed"] w IE9, Safari 5 i Firefox 16 i 17.

Jeśli wymienięeval("") zarguments, zmieni się także w Chrome.

Możeszprzetestuj go na własnej przeglądarce na jsFiddle.

W ogóle nie rozumiem tego zachowania. Jeśli funkcja powróci przed wykonaniem tych instrukcji, w jaki sposób te instrukcje mogą wpływać na wartość zwracaną? Nawet jeśli instrukcje zostałyby wykonane, dlaczego miałyby mieć jakikolwiek wpływ na mutację argumentów?

questionAnswers(3)

yourAnswerToTheQuestion