我正在尝试覆盖变量但不知何故它不起作用。 我在这里做错了什么?
var url = 'BB';
navigator.geolocation.getCurrentPosition(function (position) {
url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + position.coords.latitude.toString() + ',' + position.coords.longitude.toString();
});
console.log(url);
我的url
不应该获取整个字符串而不是输出bb
吗?
答案 0 :(得分:4)
这是因为Feb 15 10:12:52 xxx dockerd[7596]: time="2017-02-15T10:12:52.456651320+09:00" level=debug msg="Calling POST /containers/create"
Feb 15 10:12:52 xxx dockerd[7596]: time="2017-02-15T10:12:52.456886794+09:00" level=debug msg="form data: {\"AttachStdin\":true,...
是异步的,navigator.geolocation.getCurrentPosition
在你覆盖url的回调函数之前被执行
如果您不熟悉console.log(url)
执行:
Asynchronous vs synchronous execution, what does it really mean?
答案 1 :(得分:0)
正如亚当指出的那样,您在为url
变量分配值之前尝试使用'BB'
变量(除了您初始化它的url
之外)。
除非你有充分的理由让url
变量全局化并理解异步代码的问题,否则最好不要在回调之外 声明这个变量。这会导致您遇到的麻烦。
相反,在回调中将navigator.geolocation.getCurrentPosition(function (position) {
var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + position.coords.latitude.toString() + ',' + position.coords.longitude.toString();
console.log(url);
});
声明放在您指定的位置。然后在回调中或在回调内部调用的函数中做任何你需要做的事情。不要试图将它用作全局变量。
例如,这可以解决您遇到的问题:
LOC_Os04g47290
LOC_Os04g53190,LOC_Os04g53195
LOC_Os09g20260