如何给出一个局部变量,一个 javascript 中的全局范围



下面的代码片段是获取用户在聊天中提供的email idDrift chat方法。

我正在尝试通过将给定函数范围之外的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;
}

延伸阅读:

如何设置全局变量。

为什么全局变量不好。

您的控制台.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将在初始化之前运行。

相关内容

最新更新