Bueno, por supuesto que hay errores de implementación, la más grave que he tenido que hacer frente son en JScript, la implementación de Microsoft de la norma, por ejemplo:
Identificador de FunctionExpressions debe ser accesible sólo en el alcance interior de la propia función:
(function foo() {
alert(typeof foo); // "function"
})();
alert(typeof foo); // should be "undefined", on IE shows "function"
el error está presente en todas las versiones actuales de IE, que sólo se ha fijado en IE9 previstas.
Y en realidad es aún peor, se crean dos objetos de función, por ejemplo:
var foo = function bar() {};
if (typeof bar != 'undefined') { // the case of IE
alert(foo === bar); // false!!!
}
Otro error JScript bien conocido es el "DontEnum Bug", si un objeto en su cadena de ámbito contiene una propiedad que no es numerable (tiene el atributo { DontEnum }
), si la propiedad es sombreado en otro objeto, se mantendrá como no numerable, por ejemplo:
var dontEnumBug = {toString:'foo'}.propertyIsEnumerable('toString');
se evaluará a false
en IE, esto causa problemas cuando usin g la declaración for-in
, porque las propiedades no serán visitadas.
JScript es la implementación que tiene la mayor cantidad de problemas, aunque la implementación de IE9 está mejorando mucho.
Artículo recomendado:
http://stackoverflow.com/questions/3663775/object-name-same-a-function-name/ Su respuesta a esa pregunta sería una buena adición a esto. La parte FunctionStatement al menos. –
Buenos ejemplos. Si usted (u otra persona) tiene más artículos destacando las diferencias de implementación de ecmascript 3 en los navegadores, envíelas :) – AlfaTeK