我的html文件中有一个脚本部分,我在其中创建了我的gmap
对象的新实例。在函数initMap()
之外,变量gMap
未定义,尽管我在函数之外声明它。
var gMap;
function initMap() {
gMap = new gmap({
//some Properties
});
console.log(gMap); //gMap is defined
}
console.log(gMap); //gMap is undefined
该函数的调用如下:
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
我也尝试通过$(document).ready
而不是谷歌API回调来调用它,但它没有改变任何内容。
答案 0 :(得分:1)
由于gMap
存在,因此未定义,但在函数外部第一次使用console.log
调用时,它不会分配任何值。在您致电initMap()
之前 - 只有gMap
才会获得一个值(或您的案例中的属性)。如果你不想在调用函数之前得到未定义的东西,你需要在“外部函数”范围内为它赋予一些值,
比如这个简单的例子:
var gMap = 'im not undefined';
function initMap() {
gMap = 'im still not undefined';
console.log(gMap); //gMap is defined
}
console.log(gMap);
initMap();
console.log(gMap);
将产生以下输出:
"im not undefined" //outside call
"im still not undefined" //inside function call
"im still not undefined" //second outside call
答案 1 :(得分:1)
我想你会发现那是因为你没有调用这个功能。您需要在记录函数之前调用该函数以分配值。
EG:
var gMap;
function initMap() {
gMap = new gmap({
//some Properties
});
console.log(gMap); //gMap is defined
}
console.log(gMap); //gMap is undefined
initMap();
console.log(gMap); //gMap is defined
希望有所帮助!
答案 2 :(得分:0)
你是对的,谷歌回调正在你的console.log()之后运行。
所以正在发生的事情是
gMap
var。 InitMap
功能gmap
gmap
时,它是未定义的如果你这样做
$(document).ready(function(){
var gMap;
function initMap() {
gMap = new gmap({
//some Properties
});
console.log(gMap); //gMap is defined
}
console.log(gMap); //gMap is undefined
}
您仍然会收到未定义的内容,因为在您登录initMap
之前没有任何内容正在调用gmap
。在尝试登录之前,您需要gMap
下面的代码会正确加载gMap,而不知道你使用它是什么,因为我很难为你提供工作代码来完成你需要的工作。
$(document).ready(function(){
var gMap = new gmap({});
console.log(gMap); //gMap is defined
}