更改函数内的全局变量而不调用它

时间:2016-05-02 16:16:53

标签: javascript variables

我现在正在研究一个信使机器人。我仍然是javascript的新手,我在5天内一直坚持这个问题......

如果“text”=“javascript”,我试图更改一个值:

  function test() {
      if (text === 'javascript') {
          githubSearch = "javascript";
      }
  };

我在函数外部得到了一个名为githubSearch的全局变量,如下所示:

var githubSearch;

然后我在名为githubRepo的函数外面得到一个变量,我在其中调用githubSearch:

var githubRepo = "https://github.com/search?o=desc&q=" + githubSearch + "&s=stars&type=Repositories&utf8=%E2%9C%93";

我的问题是我需要在不调用函数的情况下应用我在if语句中所做的更改,我该怎么做?

1 个答案:

答案 0 :(得分:0)

当您将字符串分配给变量' githubRepo'时,它保持不变。 覆盖的唯一方法是将某些内容重新分配给' githubRepo'。

执行您尝试执行的操作的一种方法是使用返回正确URL而不是变量的函数。

var searchType = 'foo';
var getRepoAddress = function(s){
   return 'https://'+s+'/index.html';
};
console.log(getRepoAddress(searchType));
searchType = 'bar';
console.log(getRepoAddress(searchType));

在此示例中,函数将searchType作为参数,而不是使用外部函数作用域中的变量。这被认为是一种很好的做法,因为现在可以理解和测试函数,而无需读取函数外的行。

此外,您似乎需要将第一个功能拆分为两个功能,这样您就可以再调用另一个功能:

function getSearchType(text) {
    if (text === 'javascript') {
        return 'javascript'
    } else {
      return 'not_javascript'
    }
}

function test() {
   var gitHubSearch = getSearchType('foobar');
   // do something with gitHubSearch
}

// elsewhere, check the value again
console.log(getSearchType('javascript'));
console.log(
  getRepoAddress(getSearchType('javascript'))
);