全局变量在函数范围内是未定义的
Global variables are undefined within function scope
我得到了这段代码,其中变量latitude和longitude在positionSuccess函数外声明,然后在positionSuccess函数内定义。我想在以后重用这些变量,但它们总是返回为未定义。不知道为什么。
我认为如果它们是在函数之外定义的,那么它们应该在相同的作用域内对其他函数可用。我遗漏了什么吗?
$(document).ready(function(){
navigator.geolocation.getCurrentPosition(positionSuccess, positionError);
// Gets the user's location
var latitude;
var longitude;
function positionSuccess(position){
latitude = position.coords.latitude;
longitude = position.coords.longitude;
}
function positionError(error){
console.warn('ERROR: ' + error.code + ': ' + error.message);
}
// Other functions that need access to latitude and longitude variables.
)};
谢谢你的帮助!
欢迎学习Javascript异步编程。因为代码不是在函数中从上到下顺序执行的,异步回调需要一种不同的编写代码的方法,其中它们接收到的结果必须在回调内部处理,而不是在回调外部。
positionSuccess
和positionError
为异步回调。它们在你的$(document).ready()
处理程序完成执行后被调用。因此,当您尝试使用latitude
和longitude
变量时,还没有设置它们。
任何需要positionSuccess()
内部结果的代码都必须放在回调函数中,或者您可以调用其他函数并将结果变量传递给它。
$(document).ready(function(){
navigator.geolocation.getCurrentPosition(positionSuccess, positionError);
function positionSuccess(position){
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
// insert code to use the latitude and longitude variables here
}
function positionError(error){
console.warn('ERROR: ' + error.code + ': ' + error.message);
}
// the latitude and longitude data is not yet available here because
// positionSuccess() is called in the future AFTER this part of
// the code executes
)};
相关文章:
- 将自定义css保持在角度范围内
- AngularJS:'$范围未定义'
- Angular JS-文本框未在独立范围内更新
- Javascript 变量范围未定义
- ReferenceError:regeneratorRuntime未定义(但在作用域内工作)
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 在类范围内定义javascript的变量
- AngularJS范围未定义
- 在部分视图内渲染的WebGrid将引发“;“jQuery未定义”,当尝试执行基于ajax的分页或过滤时
- 隔离范围-仅在指令范围内定义的值必须执行更改
- 变量未定义/超出范围
- 因果报应测试中未定义的预期范围变量
- 在ColdFusion中表单范围中未定义AJAX请求的发布参数
- jsFunction'当事件启动器在表单内时,s数据未定义
- 错误业力“未定义”范围变量在之前每个
- 未定义范围
- 模块.导出未定义的内联函数变量
- 变量范围困惑,打印未定义的变量声明在函数内
- 为什么对于在更高范围内初始化并稍后在当前范围内初始化的变量,我会得到未定义
- 全局变量在函数范围内是未定义的