2017-08-03 11 views
0

以下のコードスニペットは、email idをチャットで提供するDrift chatメソッドです。どのようにローカル変数、JavaScriptのグローバルスコープを与える

グローバル変数data_emailに格納して、特定の機能スコープ外のemail id (e.data.email)にアクセスしようとしています。

私はdata_emailグローバル変数を作るためにthree方法を試してみました - windowletconstを。

window.drift.on("emailCapture", function(e) { 
    console.log("user identified as: " + e.data.email); 

    window.data_email = e.data.email; 
    // let data_email = e.data.email; 
    // const data_email = e.data.email; 

    ga('send', 'event', { 
     eventCategory: 'driftemail', 
     eventAction: 'driftemailCaptured', 
    }); 
}); 

console.log(data_email); 

エラーが発生しました - Uncaught ReferenceError: data_email is not defined。 誰かが私に回避策を提案してください、私は非常に感謝します。私の目標は、指定された機能の外でキャプチャされた電子メールにアクセスすることです。

+0

値を取得しようとする前にイベントが発生しましたか? – Teemu

+0

イベントを発生させた後、電子メールが関数 'console.log(" + e.data.email)でキャプチャされていますが、外部変数に同じエラーが発生しています –

+0

イベントハンドラの前に宣言してからグローバルスコープを持ち、 'const'ではなく' let'または 'var'を使用します –

答えて

0

最初にwindow.data_emailを初期化して変異させる必要があります。 console.logが初期化される前に実行されるためです。

+0

あなたはあなたの答えと同じことをするためのコードを提供してください。 –

+0

@Jefree Sujitの答えは –

1

問題イベントを聞いているという事実があります。それは今、後で、あるいは決して起こることはありません。しかし、すぐにコンソールにログオンしようとします。

ご提供いただいた情報の量が少ない場合は、問題に対するさまざまな解決策がある可能性があります。その機能は、電子メールを受け入れ、引数として電子メールでこの

よう

何かを機能グローバル

  • コールとして設定し、

    • 外の機能を:しかし、一つの解決策を作ることです

      window.drift.on("emailCapture", function(e) { 
          console.log("user identified as: " + e.data.email); 
      
          setChatEmail(e.data.email); 
      
          //window.data_email = e.data.email; 
          //let data_email = e.data.email; 
          //const data_email = e.data.email; 
      
          ga('send', 'event', { 
           eventCategory: 'driftemail', 
           eventAction: 'driftemailCaptured', 
          }); 
      }); 
      
      
      function setChatEmail(email) { 
          window.data_email = email; 
      } 
      

      続きを読む:

      どのようにsetグローバル変数。

      なぜglobalが悪いですか?

  • 1

    "emailCapture"イベントが実行される前にconsole.logが実行されます。それはなぜあなたに未定義を与えているのか、このイベントを実行した後にあなたがしたいことをすべて試してみてください。

    var data_email; 
    var getEmail = function() { 
        console.log(data_email); 
    }; 
    window.drift.on("emailCapture", function(e) { 
        console.log("user identified as: " + e.data.email); 
    
        window.data_email = e.data.email; 
        data_email = e.data.email; 
        // const data_email = e.data.email; 
    
        ga('send', 'event', { 
         eventCategory: 'driftemail', 
         eventAction: 'driftemailCaptured', 
        }); 
        getEmail(); 
    }); 
    
    +0

    のようです。あなたの例では、コールバック関数はどのようにコールバック関数ですか?明らかにそうではありません。中断しないように関数名を変更するか、コールバックにします。 –

    +0

    あなたの質問が理解できませんでした – Selvakumar

    +0

    あなたが言うコールバック関数です。そうではない。 –

    関連する問題