Meine Funktion verhält sich nicht wie erwartet, und ich versuche festzustellen, ob dies daran liegt, dass ich den Umfang falsch verstanden habe.Kann ich auf eine Funktion in einer Funktion im übergeordneten Raum verweisen?
Die folgende Funktion durchsucht ein Array namens dataLayer
, um festzustellen, ob eines der Objekte eine eventAction
-Eigenschaft aufweist, die mit einer Zeichenfolge übereinstimmt.
Die Idee ist, dass, wenn ich keinen passenden Wert finden kann, dann drücken Sie einen Wert in dataLayer
Array, sonst nichts tun.
Ich habe eine Funktion, die eine andere Funktion referenziert. getNegativeErrs()
Referenzen getByValue()
.
Was wäre der geeignete Weg, um es zum Laufen zu bringen? Wie kann ich getByValue()
anderen Funktionen zur Verfügung stellen?
Code:
var errors = [
'Your password must be at least 6 characters long.',
'Please enter a valid email address.'
];
getNegativeErrs(errors);
function getNegativeErrs(ers) {
for(i in errors) {
var errobj = getByValue(dataLayer, errors[i]); //updated based on comments
if(!errobj) { // if errobj is undefined continue. errobj is undefined when it should have a value so getByValue() not working as expected
dataLayer.push({
'event': 'negative_errors',
'unseen': errors[i]
})
}
}
}
function getByValue(arr, value) {
for (var j=0, jLen=arr.length; j<jLen; j++) {
if (arr[j].eventAction == value) return arr[j];
}
}
Ich sehe kein Problem Bereich. Was lässt dich denken, dass es einen gibt? Sind diese Funktionen in verschiedenen Dateien? Oder verschiedene Skripte in der gleichen Datei? –
Hmm. Vielleicht stimmt da etwas nicht. Wenn ich Umstände erstelle, wo errobj einen Wert (ein Objekt) haben sollte, zeigt die Konsole es als undefiniert an. Also funktioniert getByValue() nicht wie erwartet. Die Sache ist, es funktioniert, wenn ich in der Konsole außerhalb der Funktion teste. : -/ –
Wenn dies Ihr gesamter Code ist, fehlt Ihnen die Variable 'dataLayer', daher wird die Funktion nicht korrekt ausgeführt. – Dekel