Por que uma avaliação não executada afeta o comportamento de alguns navegadores?

Vamos supor que eu tenha essas duas funções:

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

Na maioria dos navegadores, exceto o Opera, isso retorna["original", " => ", "original"].

Mas se eu mudar of funcionam assim,

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

ele retornará["original", " => ", "changed"] no IE9, Safari 5 e Firefox 16 e 17.

Se eu substituireval("") comarguments, também mudará no Chrome.

Você podeteste-o no seu próprio navegador no jsFiddle.

Eu não entendo esse comportamento em tudo. Se a função retornar antes que essas instruções sejam executadas, como essas instruções podem afetar o valor de retorno? Mesmo se as declarações fossem executadas, por que elas teriam algum efeito na mutação do argumento?

questionAnswers(3)

yourAnswerToTheQuestion