<a>
elementos tiene un atributo download
en HTML5 como se explica here, con un valor predeterminado de ""
(una cadena vacía).
Esto significa que download === this.download
en el controlador onclick
(this
es el elemento en onevent
atributos), y por lo tanto el atributo download
del elemento es superior a la propiedad download
de window
.
This fiddle enumera todos los atributos de cadena que están presentes de forma predeterminada. Usted puede ver download
es un atributo como innerHTML
, que also fails con el mismo motivo cuando se utiliza como una función (es decir, tratando de hacer referencia a window.innerHTML
, pero en su lugar ejecutando elem.innerHTML()
).
Como se dijo en los comentarios, el uso de window
no genera confusión sobre a qué propiedades/variables de atributo se evaluarán.
Este comportamiento alcance no parece realmente a Debido al valor this
pero "cadena de ámbito" más bien una específica que se está construyendo.
Según the HTML5 specification:
léxico medio ambiente Ámbito
Vamos Scope
ser el resultado de NewObjectEnvironment(the element's Document, the global environment)
.
Si el elemento tiene un propietario de formulario, deje que Scope
sea el resultado de NewObjectEnvironment(the element's form owner, Scope)
.
Deje Scope
Sea el resultado de NewObjectEnvironment(the element's object, Scope)
.
I.e. lo que está sucediendo es que la cadena de alcance es window
->document
->element
(aumento de la superioridad). Esto significa que download
evalúa a element.download
y no a window.download
. Lo que también se puede concluir de esto es que getElementById
burbujeará hasta document.getElementById
(dado elem.getElementById
no existe).
puedo configurar a systematic example de manera que se puede ver cómo las variables propagarse por la cadena de ámbitos:
window.a = 1;
document.a = 2;
elem.a = 3;
window.b = 4;
document.b = 5;
window.c = 6;
Entonces, <a ... onclick="console.log(a, b, c)">
registros 3
, 5
, 6
cuando se hace clic.
¿Tiene alguna extensión instalada? –
Confirmado. Incluso eliminar el 'javascript:' que no debería estar allí no ayuda. ¡Extraño! –
No use funciones globales. Coloque sus funciones en un espacio de nombres y enlace el controlador de eventos mediante programación. –