首页 > 解决方案 > 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 使用它,我在这里询问了它。

标签: javascript

解决方案


因此,如前面的答案中所述,尽可能避免使用全局变量的原因。当某些全局值被覆盖时,它很容易覆盖问题和故障排除。根据我自己的经验,我通常会创建一个实用程序来处理共享值。思路如下

//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 来跟踪所有全局值,因为这是设置“全局”值上下文的唯一方法。


推荐阅读