我的范围有什么问题?为什么我不覆盖变量? js
what's wrong with my scope? Why am I not overwriting the variable? js
我正在尝试覆盖一个变量,但不知何故它不起作用。
我在这里做错了什么?
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
吗?
这是因为 navigator.geolocation.getCurrentPosition
是异步的并且 console.log(url)
在覆盖 url
的回调函数之前执行
如果您不熟悉 asynchronous
执行,此线程可能会有所帮助:
Asynchronous vs synchronous execution, what does it really mean?
正如 Adam 指出的那样,您试图在 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);
});
我正在尝试覆盖一个变量,但不知何故它不起作用。 我在这里做错了什么?
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
吗?
这是因为 navigator.geolocation.getCurrentPosition
是异步的并且 console.log(url)
在覆盖 url
如果您不熟悉 asynchronous
执行,此线程可能会有所帮助:
Asynchronous vs synchronous execution, what does it really mean?
正如 Adam 指出的那样,您试图在 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);
});