Esto funciona en el caso con 'var' porque se crea la variable-stop en la resolución del alcance. Sin la 'var' que acaba de salir mirando a través de las cadenas de alcance y le dicen. Si realmente quiere de usar una variable global:
// This is fine because assignment always sets a property value
// in this case (no 'var ga') it's the same as window.ga = window.ga || []
ga = window.ga || []
O:
// Once again, only the lookup is affected with "running off"
// the lookup chain. It's not that the variable has no value --
// the problem is there IS NO VARIABLE.
if (!window.ga) {
ga = []
}
O incluso esto:
// First line is the same as window.ga = window.ga,
// but now the property ga is guaranteed to exist on the window object --
// the VALUE of the property may (still) be undefined
ga = window.ga
ga = ga || []
Nótese que en ambos casos he invocado explícitamente ga
como una propiedad del objeto window
(global).
Puede leer sobre los detalles aquí: Identifier Resolution, Execution Contexts and Scope Chains.
colocación de var dentro de un alcance no importa.Todos los siguientes son los mismos:
var ga
ga = ga || []
var ga = ga || []
ga = ga || []
var ga
Quizás quiso decir 'var ga = ga || [] 'porque' ga = ga || []; 'errores también (como señaló S.Mark). – R0MANARMY
Gracias por señalar esto. He actualizado la pregunta. –
Pensé que era ga = ga || oh.la = la; want (yourBadRomance); –