javascript - javascript中的全局变量是否应该始终避免?
问题描述
我已经看到,谷歌放置了 api 文档,建议在函数之外使用全局变量,例如:
var placeSearch, pauto, geocoder;
我想在函数之外使用data
返回的 from 。
我还可以使用将由回调函数内部提供的全局变量吗? $.get
data
var glo_var;
function callback(data){
glo_var = data;
}
function codeAddress(address) {
geocoder.geocode({ 'address': address},
function(response, status) {
if (status == 'OK')
{
var senddata = $.get('/myurl',{params}, function (data){ callback(data) });
} else {
}
});
}
任何其他方式,我可以利用返回的 datafrom $.get
。我不明白闭包。
编辑 - 为什么这是重复的,我问在哪里存储返回的数据,我已经知道如何获取它?这是我不确定的全局变量的使用,但由于 google api 使用它,我在这里询问了它。
解决方案
因此,如前面的答案中所述,尽可能避免使用全局变量的原因。当某些全局值被覆盖时,它很容易覆盖问题和故障排除。根据我自己的经验,我通常会创建一个实用程序来处理共享值。思路如下
//global.js
(function(){
const context = {};
function setGlobalValue(key, value) {
context[key] = value;
}
function getGlobalValue(key) {
return context[key];
}
window.setGlobalValue = setGlobalValue;
window.getGlobalValue = getGlobalValue;
}());
// app.js
function codeAddress(address) {
geocoder.geocode({ 'address': address},
function(response, status) {
if (status == 'OK')
{
var senddata = $.get('/myurl',{params}, function (data){ setGlobalValue('codeAddress', data) });
} else {
}
});
}
// get value here
console.log(getGlobalValue('codeAddress'));
通过这种方式,我们可以通过搜索 setGlobalValue 来跟踪所有全局值,因为这是设置“全局”值上下文的唯一方法。
推荐阅读
- clojure - clojure中的object-like-map和collection-like-map有什么区别?
- java - 控制台输入,使用 Maven 在 NetBeans 9 中丢失 UTF8 编码
- json - 如何在 Spark Scala 中读取嵌套 JSON?
- azure-gov - 有没有办法提前知道使用哪个广告进行身份验证?
- java - Log4j2 高亮模式在文本编辑器中不起作用?
- java - 转发具有完全相同 json 正文的请求
- bash - 如何在条件命令中立即退出?
- android - 使用 Retrofit 2 和 Logging Interceptor 进行身份验证 1 小时后令牌过期
- pandas - 获取熊猫数据框列表条目中的数字条目
- python-3.x - 根据玩家的移动在 pygame 中移动平铺地图