2017-08-03 108 views
0

下面的代码片段是Drift chat方法来获取用户在聊天中提供的email id如何在JavaScript中给出局部变量,全局范围

我试图通过将email id (e.data.email)存储在全局变量data_email之外来访问给定函数范围之外的email id (e.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。 请任何人建议我一个工作,我会非常感激。我的目标是在给定功能之外访问捕获的电子邮件。

+0

在尝试检索该值之前发生了事件吗? – Teemu

+0

之后触发事件和电子邮件捕获功能 - 'console.log(“用户标识为:”+ e.data.email);'但外部变量相同的错误 –

+0

声明它的事件处理程序,然后它将具有全局范围 - 并且使用'let'或'var'而不是'const' –

回答

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

您的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(); 
}); 
+0

在你的例子中,callbackFunc是一个回调函数吗?显然不是。要么更改函数名称,以免影响,或使其成为回调。 –

+0

不明白你的问题 – Selvakumar

+0

你说的功能是回调。不是这样。 –