Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问全局变量的问题_Javascript_Html - Fatal编程技术网

Javascript 访问全局变量的问题

Javascript 访问全局变量的问题,javascript,html,Javascript,Html,我在使用javascript访问附加到窗口的全局变量时遇到一些问题。 这是我的代码片段,我已经使用脚本标签将它嵌入到我的索引页中 var Geolocation = function() { var self = this; self.errors = { TIMEOUT: 1, POSITION_UNAVAILABLE: 2, PERMISSION_DENIED: 3, UNKNOWN_ERROR: 4 }; self.getCurrentP

我在使用javascript访问附加到窗口的全局变量时遇到一些问题。 这是我的代码片段,我已经使用脚本标签将它嵌入到我的索引页中

var Geolocation = function() {
  var self = this;

  self.errors = {
    TIMEOUT: 1,
    POSITION_UNAVAILABLE: 2,
    PERMISSION_DENIED: 3,
    UNKNOWN_ERROR: 4
  };

  self.getCurrentPosition = function( success, error, options ) {
    // simulate the wait for the user choice
    var geoIntervalId = window.setInterval(function( ) {
      if ( state != null ) {
        window.clearInterval(geoIntervalId);

        switch( state ) {
          case 'ok':
            success(new Position(latitude, longitude));
            break;
          case 'timeout': case 'position_unavailable': case 'permission_denied':
            error( new GeolocationError( self.errors[state.toUpperCase()] ) );
            break;
          default:
            error( new GeolocationError( self.errors.UNKNOWN_ERROR ) );
        }
      }
    }, 100); // ms
  };
}

var Position = function( lat, lng ) {
  this.coords = new Coordinates(lat, lng);
}

var Coordinates = function( lat, lng ) {
  this.latitude  = lat;
  this.longitude = lng;
}

var GeolocationError = function( code ) {
  this.TIMEOUT = 1;
  this.POSITION_UNAVAILABLE = 2;
  this.PERMISSION_DENIED = 3;
  this.UNKNOWN_ERROR = 4;

  this.code = code;
}

var state     = null,
    latitude  = null,
    longitude = null;

window.geolocation_provider = new Geolocation();

在此之后,我再次使用script标记在索引文件中包含了另一个javascript文件,比如test.js。现在,当我尝试访问window.geolocation\u provider变量时,结果是null。为什么会这样

问题可能是某些文件在其他文件之前/之后执行;理想情况下,可以通过确保在执行任何重要代码之前加载所有javascript函数定义来解决此问题


您可能想看看javascript中的。还有一些其他问题可以解决这个问题。

问题可能是某些文件在其他文件之前/之后执行;理想情况下,可以通过确保在执行任何重要代码之前加载所有javascript函数定义来解决此问题

您可能想看看javascript中的。还有一些其他问题可以解决这个问题。

试试这个

(function(window){
  var Geolocation = function() {
  var self = this;

  self.errors = {
    TIMEOUT: 1,
    POSITION_UNAVAILABLE: 2,
    PERMISSION_DENIED: 3,
    UNKNOWN_ERROR: 4
  };

  self.getCurrentPosition = function( success, error, options ) {
    // simulate the wait for the user choice
    var geoIntervalId = window.setInterval(function( ) {
      if ( state !== null ) {
        window.clearInterval(geoIntervalId);

        switch( state ) {
          case 'ok':
            success(new Position(latitude, longitude));
            break;
          case 'timeout': case 'position_unavailable': case 'permission_denied':
            error( new GeolocationError( self.errors[state.toUpperCase()] ) );
            break;
          default:
            error( new GeolocationError( self.errors.UNKNOWN_ERROR ) );
        }
      }
    }, 100); // ms
  };
};

var Position = function( lat, lng ) {
  this.coords = new Coordinates(lat, lng);
};

var Coordinates = function( lat, lng ) {
  this.latitude  = lat;
  this.longitude = lng;
};

var GeolocationError = function( code ) {
  this.TIMEOUT = 1;
  this.POSITION_UNAVAILABLE = 2;
  this.PERMISSION_DENIED = 3;
  this.UNKNOWN_ERROR = 4;

  this.code = code;
};

var state     = null,
    latitude  = null,
    longitude = null;
if(window.geolocation_provider === undefined){
    window.geolocation_provider = new Geolocation();
}
})(window ? window : this)
试试这个

(function(window){
  var Geolocation = function() {
  var self = this;

  self.errors = {
    TIMEOUT: 1,
    POSITION_UNAVAILABLE: 2,
    PERMISSION_DENIED: 3,
    UNKNOWN_ERROR: 4
  };

  self.getCurrentPosition = function( success, error, options ) {
    // simulate the wait for the user choice
    var geoIntervalId = window.setInterval(function( ) {
      if ( state !== null ) {
        window.clearInterval(geoIntervalId);

        switch( state ) {
          case 'ok':
            success(new Position(latitude, longitude));
            break;
          case 'timeout': case 'position_unavailable': case 'permission_denied':
            error( new GeolocationError( self.errors[state.toUpperCase()] ) );
            break;
          default:
            error( new GeolocationError( self.errors.UNKNOWN_ERROR ) );
        }
      }
    }, 100); // ms
  };
};

var Position = function( lat, lng ) {
  this.coords = new Coordinates(lat, lng);
};

var Coordinates = function( lat, lng ) {
  this.latitude  = lat;
  this.longitude = lng;
};

var GeolocationError = function( code ) {
  this.TIMEOUT = 1;
  this.POSITION_UNAVAILABLE = 2;
  this.PERMISSION_DENIED = 3;
  this.UNKNOWN_ERROR = 4;

  this.code = code;
};

var state     = null,
    latitude  = null,
    longitude = null;
if(window.geolocation_provider === undefined){
    window.geolocation_provider = new Geolocation();
}
})(window ? window : this)

我的第一个建议是在处理外部.js文件时检查执行顺序。这是我在处理JS时遇到的一个常见问题。这会导致null频繁出现。该值是null还是未定义?执行顺序的问题肯定会导致未定义的值。要验证问题是否与第二个文件有关,请放置“警报(window.geolocation\u provider)调用Geolocation后,查看值是什么。同样在test.js文件中,您是如何引用geiolocation_提供程序的?我的第一个建议是在处理外部.js文件时检查执行顺序。这是我在处理js时遇到的一个常见问题。这会导致经常出现null。值是null还是u未定义?执行顺序问题肯定会导致未定义的值。若要验证该问题是否与第二个文件相关,请在调用geolocation后放置“警报”(window.geolocation\u provider),并查看该值。在test.js文件中,您是如何引用geiolocation\u提供者的?