2016-08-08 12 views
-1

私の機能が期待どおりに動作していないと私はスコープの誤解が原因であるかどうかを判断しようとしています。親空間にある関数内の関数を参照できますか?

以下の関数は、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]; 
    } 
    } 
+2

範囲の問題はありません。何があると思いますか?これらの機能は異なるファイルにありますか?または同じファイル内の異なるスクリプトですか? –

+0

Hmm。たぶんそこに何か別のものがあります。 errobjが値(オブジェクト)を持つべき状況を作成すると、コンソールはそれを未定義として表示します。したがって、getByValue()は期待どおりに動作しません。それは機能の外のコンソールでテストすると機能します。 : -/ –

+0

これがあなたのコードのすべてであれば、 'dataLayer'変数が欠落しているので、関数は正しく実行されません。 – Dekel

答えて

0

それはあなたのコードの範囲であれば、getByValue()はグローバルスコープ内にあり、アクセス可能である必要があります。

これは、dataLayersが定義されていないため動作しない可能性があります。

また

http://jsbin.com/bivepitafe/

は、getNegativeErrors()がそれに渡されたersパラメータが、グローバルスコープでもあるerrors変数を使用していないことに注意してください。

function getNegativeErrs(ers) { 
    for(i in errors) { 
3

getByValueの2番目の引数は文字列か整数かと思いますか?現在のところ、これは整数です。ループするループのerrors配列のインデックスです。あなたは、インデックス値ではなくgetByValue(dataLayer, errors[i])に変更getByValue(dataLayer, i)を渡すことを意味している場合

getByValue(dataLayer, 0) 
getByValue(dataLayer, 1) 

:あなたのループは、このようなgetByValueを呼び出しています。

+0

回答したすべての人に役立つアドバイスありがとう、私のコードで指摘のおかげで別の間違いです。私の元の問題は残っています。瞬間にリンクを投稿する –

0

getNegativeErrs関数に問題があります。渡した引数は使用していません。それは

function getNegativeErrs(ers) { 
     for(i in ers) { 
    var errobj = getByValue(dataLayer, ers[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': ers[i] 
    }); 
    } 
    } 
} 

はまた、あなたがキーeventActionをマッチングエラーdataLayer配列をチェックしているが、その後、あなたがキーeventを追加している上記の機能に...どちらか一方が動作します。このようになるはずです、あなただけに必要それらを同じにする。 私はスコープの問題は表示されません。しかし、それを完全に排除したい場合は、getByValueファンクションをgetNegativeErrsファンクションの上にカットアンドペーストするだけです。

関連する問題