estoy viendo esta conferencia: http://www.youtube.com/watch?v=Kq4FpMe6cRsEcmaScript 5 Google TechTalk - accidente de Alcance 1
// the speaker states that "'bar' is just some function
// that invokes whatever function is passed to it"
function bar(fn) {
fn();
}
function foo() {
var x = 8;
bar(function baz() { return x; });
}
Object.prototype.x = 'foo';
En el minuto 35, se presenta el problema anterior se muestra. El conferenciante afirma que algunos buscadores devolverán foo
en lugar de 8
.
¿Por qué?
Por cierto, al escribir esta pregunta, me di cuenta, pero voy a publicar esta pregunta de todos modos, ya que es un tema interesante. :)
en vivo de demostración:http://jsfiddle.net/simevidas/mHyKc/
Opera 11 alertas 'foo'
, todos mis otros navegadores (incluyendo IE9) devuelven 8
.
Actualización: me retracto de lo que dije de haber dado cuenta de esto. Tiene algo que ver con que la función anidada sea una función nombrada. Si elimina el nombre (baz
), entonces Opera devuelve 8
, lo que significa que el problema solo ocurre con las funciones anidadas con nombre.
¿Pero por qué?
entiendo el punto de la pregunta, y yo creo que es una distinción importante, pero esta función 'foo' tiene algún código-olor. – zzzzBov