私の機能が期待どおりに動作していないと私はスコープの誤解が原因であるかどうかを判断しようとしています。親空間にある関数内の関数を参照できますか?
以下の関数は、dataLayer
という配列を検索して、いずれかのオブジェクトに文字列に一致するeventAction
プロパティがあるかどうかを調べます。
考えられるのは、一致する値が見つからない場合は、値をdataLayer
配列にプッシュし、それ以外の場合は何もしないということです。
私は別の関数を参照する関数を持っています。 getNegativeErrs()
参照getByValue()
。
正常に動作するにはどうすればよいですか? getByValue()
を他の機能で使用できるようにするにはどうすればよいですか?
コード:
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];
}
}
範囲の問題はありません。何があると思いますか?これらの機能は異なるファイルにありますか?または同じファイル内の異なるスクリプトですか? –
Hmm。たぶんそこに何か別のものがあります。 errobjが値(オブジェクト)を持つべき状況を作成すると、コンソールはそれを未定義として表示します。したがって、getByValue()は期待どおりに動作しません。それは機能の外のコンソールでテストすると機能します。 : -/ –
これがあなたのコードのすべてであれば、 'dataLayer'変数が欠落しているので、関数は正しく実行されません。 – Dekel