javascript - 全局变量在控制台中显示为未定义 - 不习惯

标签 javascript global-variables

这是我的模块中的第一个 javascript 声明:

<script type='text/javascript'>
var json_meets;
var teams;
var my_meet;

window.onload = function() {
    AJAX( '/ajax/getFacilities.html','','populate_datalist_from_array','facilities' );
    AJAX( '/ajax/getAssociations.html','','process_associations','datalist_for_new_team_Association' );
$( "#add_team_dialog" ).dialog({ autoOpen: false });
    window.json_meets = { "meets" : [] };
    window.teams = [];
    window.my_meet = {
        "meet_name" : "",
        "meet_date" : "",
        "meet_id"   : "",
        "meet_location" : "",
        "teams"     : []
    };
}

稍后我会包含一个或两个声明此函数的文件:

function submitTeamToAdd( obj ) {
var doit = 0;

// get Display name of team in input box
var team = document.getElementById( 'add_team_input' ).value;

for ( var i = 0 ; i < window.my_meet.teams.length ; i++ ) {
    if ( getTeamDisplayName( window.my_meet.teams[i] ) == team ) {
        alert( team + ' is already participating.' );
        document.getElementById( 'add_team_input' ).value = '';
        return;
    } 
}   

for ( var i = 0 ; i < window.teams.length ; i++ ) {
    if ( getTeamDisplayName( window.teams[i] ) == team ) {
        doit = 1;
        break;
    }   
}
if ( doit == 1 ) {
    putTeamOnList( team , obj );
} else {
    // open the dialog to add a new team to the database
    openDialog( 'add_team_dialog' );

    // pass thru the name of the team that was entered clear out legacies.
    document.getElementById( 'add_new_team_Name' ).value = team;
    document.getElementById( 'add_new_team_Nickname' ).value = '';
    document.getElementById( 'add_new_team_Association' ).value = '';
    document.getElementById( 'add_new_team_Mascot' ).value = '';
    document.getElementById( 'add_new_team_Classification' ).value = '';
}
}

当该函数触发时,控制台会抛出:

TypeError: window.my_meet is undefined

怎么是未定义的呢?变量在 window.onload 函数内声明和初始化。我可以理解它们本质上是空的,但这并不意味着它们是未定义的,对吧?它应该只是一个长度为 0 的数组。

最佳答案

它是未定义的,因为你没有定义它。您声明了它,但当您的函数尝试访问它时,它的值仍然是 undefined

window.onload 在加载所有资源(包括图像)后触发,但您似乎在此之前调用了您的函数。在调用函数之前,您需要等待 AJAX 调用完成。

关于javascript - 全局变量在控制台中显示为未定义 - 不习惯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18070268/

相关文章:

php - 如何在方法中声明属性?

javascript - 使用 Javascript 在 json 中进行查询

javascript - 如何在axios get方法头中设置用户名和密码

multithreading - 如何在 Swift 中创建非原子全局或静态变量

c - fork() 情况下的全局变量值

java - 如何在两个不同的窗口中识别全局变量(Java Swing GUI)

javascript - postMessage 到沙盒 iframe,为什么收件人窗口原点为空?

javascript - 如何隐藏一组td元素?

javascript - 如何覆盖 Parsley JS 焦点行为