JavaScript变量在函数

时间:2016-12-15 14:46:09

标签: javascript jquery

我的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回调来调用它,但它没有改变任何内容。

3 个答案:

答案 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()之后运行。

所以正在发生的事情是

  1. 您声明gMap var。
  2. 然后您创建InitMap功能
  3. 然后输出gmap
  4. 然后谷歌正在调用你的回调函数。因此,当您在函数之外输出gmap时,它是未定义的
  5. 如果你这样做

    $(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
    

    }