繁体   English   中英

如何在JavaScript中提供局部变量,全局范围

[英]How to give a local variable, a global scope in javascript

下面的代码段是Drift chat方法,用于获取用户在聊天中提供的email id

我试图通过将给定功能范围之外的email id (e.data.email)存储在全局变量data_email来访问它。

我曾尝试three方法使data_email全局变量- 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 请任何人建议我变通,我将非常感激。 我的目标是在给定功能之外访问捕获的电子邮件。

您遇到的问题是您正在收听事件。 这种情况现在可能会发生,以后甚至永远不会发生。 但是,您立即尝试控制台记录它。

鉴于您提供的信息量很少,因此可能有各种解决方案。 但是一种解决方案是:

  • 外部函数,该函数接受电子邮件并将其设置为全局

  • 以电子邮件为参数调用该函数

像这样

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;
}

进一步阅读:

如何设置全局变量。

为什么全局变量不好。

您的console.log在执行“ emailCapture”事件之前运行。 这就是为什么它给您未定义的原因,请在执行此事件后尝试尝试执行所有操作。

 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();
});

您需要首先在顶部初始化window.data_email ,然后对其进行变异。 因为console.log将在初始化之前运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM