Działa to w przypadku z "var", ponieważ tworzony jest zmienny-stop w rozdzielczości zakresu. Bez "var" po prostu uciekniesz, przeglądając łańcuchy zasięgu i otrzymasz informację. Jeśli naprawdę chcą użyć zmiennej globalnej:
// 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 || []
czyli
// 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 = []
}
Albo jeszcze tak:
// 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 || []
zauważyć, że w obu tych przypadkach jawnie wywołana ga
jako właściwość obiektu (globalnego) window
.
Możesz przeczytać o szczegółach tutaj: Identifier Resolution, Execution Contexts and Scope Chains.
Umieszczenievar w zakresie nie ma znaczenia.Wszystkie z poniższych są takie same:
var ga
ga = ga || []
var ga = ga || []
ga = ga || []
var ga
Czy chodziło o 'var ga = ga || [] 'ponieważ' ga = ga || []; 'również błędy (jak zauważył S.Mark). – R0MANARMY
Dzięki za wskazanie tego. Zaktualizowałem to pytanie. –
Myślałem, że to był ga = ga || oh.la = la; want (yourBadRomance); –