繁体   English   中英

无法访问另一个文件中的全局变量

[英]Global variable in another file can't be accessed

我知道已经问了很多遍了,但是我已经检查了其他几个问题和答案,但距离解决我的问题还很近。

index.html的:

<!doctype html>
<html lang="en" ng-app="GitUserSearch">
  <head>
    <meta charset="utf-8">
    <title>Github user search</title>
    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css">
    <link rel="stylesheet" href="bootstrap_css_overrides/bootstrap_overrides.css">
    <script src="bower_components/jquery/dist/jquery.js"></script>
    <script src="bower_components/angular/angular.js"></script>
    <script src="bower_components/angular-resource/angular-resource.js"></script>
    <script src="js/secrets.js"></script>
    <script src="js/app.js"></script>
    <script src="js/gitUserSearchController.js"></script>
  </head>

  <body ng-controller="GitUserSearchController as searchCtrl">
    <div class="container">
      <br>
      <form class="form-horizontal">
        <input type="text" ng-model="searchCtrl.searchTerm" ng-change="searchCtrl.doSearch()" ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }">
        <button class="btn btn-primary" ng-click="searchCtrl.doSearch()">Search</button>
      </form>
      <br>
      <ul class="list-group">
        <li ng-repeat="user in searchCtrl.searchResult.items">
          <img ng-src="{{user.avatar_url}}&s=50">
          <a ng-href="{{user.html_url}}">{{user.login}}</a>
        </li>
      </ul>
    </div>
  </body>
</html>

JS / secrets.js:

githubToken = "longGithubTokenThatICannotShareHerePublicly";

secrets.js位于.gitignore中。

JS / gitUserSearchController.js:

githubUserSearch.controller('GitUserSearchController', ['$resource', function($resource) {
  var self = this;

  var searchResource = $resource('https://api.github.com/search/users/');
  var githubToken = githubToken;

  self.doSearch = function() {
    self.searchResult = searchResource.get(
      { q: self.searchTerm, access_token: githubToken }
    );
  };
}]);

当我运行该应用程序时,我可以使用浏览器的检查工具看到发出的http请求没有 githubToken字符串。

当我将githubToken字符串硬编码到gitUserSearchController中时,而不是尝试使用假定的githubToken全局变量,该HTTP请求是使用存在的GitHub令牌完美完成的,应该如此。

因此,如何设置文件以及如何声明和访问变量似乎是一个问题。

在这里回购。

执行此操作时:

var githubToken = githubToken;

您正在定义一个新的局部变量,该变量以相同的名称“隐藏”全局变量。 对于任何给定的符号名称,在搜索全局范围之前先搜索局部范围,因此与全局名称相同的局部变量实质上会“隐藏”全局变量。

另外,由于将Java语言中的所有var定义“提升”到声明它们的函数范围的顶部,因此实际上将您上面的代码行处理如下:

var githubToken;
githubToken = githubToken;

因此,您可以进一步了解为什么它没有按照自己的意愿去做。

将局部变量的名称更改为其他名称,或者甚至不定义新变量,只需直接使用全局变量,因为无论如何似乎都没有理由分配给局部变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM