fand ich in diesem Code-Schnipsel JS von Google minimierte:Was bedeutet diese For-Schleife?
_ga.utils.getValidColumnGroups = function(a) {
for (var b = [], c = 0, d; d = _ga.metadata.items[c]; ++c)
d = d.attributes.group,
a && (d = _ga.utils.getNormalizedName(d)),
-1 == b.indexOf(d) && b.push(d);
return b
};
Ohne zu viel speziell konzentriert, was diese Funktion tun wird,
Ich frage mich, wie das enden wird Schleifen, wenn die Anweisung Bedingungen weist Werte zu und nicht den typischen Vergleichsoperator?
d = _ga.metadata.items[c]
Was vor allem mit variabler
d
in dieser Linie passieren?var b = [], c = 0, d;
In normalen Fällen wird es mit der letzten Anweisung des Kommas zuweisen. Aber vielleicht sind es nicht die Fälle in bestimmten Situationen. Wenn nicht, sind die ersten beiden Aufgaben nutzlos. Was diese Linien machen?
d = d.attributes.group, a && (d = _ga.utils.getNormalizedName(d)), -1 == b.indexOf(d) && b.push(d);
Wenn d einen booleschen oder undefinierten Wert (oder eine Variante, bei der eine Bedingung als falsch gelesen wird) endet, wird die Schleife beendet. Und für den zweiten Teil ist dies nur Instanziierung, um sicher zu gehen, dass wir mit der richtigen Scope-Variable arbeiten. – AxelH
@AxelH: Das macht Sinn!Fühlen Sie sich frei, es als die Antwort zu machen – geckob
@ AxelH - die Verwendung einer Variablendeklaration mit * var * in einem * for * -Ausdruck beschränkt den Gültigkeitsbereich nur auf den umgebenden Ausführungskontext. * let * ist erforderlich, um den Umfang auf den Block * for * zu beschränken. ;-) – RobG