如何在 javascript 中赋予局部变量全局作用域
2017-08-03
121
以下代码片段是
Drift chat
方法,用于获取用户在聊天中提供的
email id
。
我试图通过将
email id (e.data.email)
存储在全局变量
data_email
中来访问给定函数范围之外的它。
我尝试了
three
方法来创建
data_email
全局变量 -
window
、
let
、
const
。
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
。
请任何人给我一个解决方法,我将不胜感激。我的目标是在给定函数之外访问捕获的电子邮件。
3个回答
您遇到的问题是您正在监听一个事件。这可能现在发生,稍后发生或永远不会发生。但是您立即尝试控制台记录它。
鉴于您提供的信息量很少,您的问题可能有多种解决方案。但有一种解决方案是:
-
在函数外部,该函数接受电子邮件并将其设置为全局变量
-
使用电子邮件作为参数调用该函数
类似这样的
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;
}
进一步阅读:
如何 设置 全局变量。
为什么 全局 变量不好。
Amiga500
2017-08-03
您的 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();
});
Selvakumar
2017-08-03
您需要先初始化顶部的
window.data_email
,然后对其进行变异。因为
console.log
将在初始化之前运行。
Le Duy Khanh
2017-08-03