在表达式中使用未声明、未初始化的变量:该怎么想?

Undeclared, uninitialised variables being used in expressions: what to think?

本文关键字:变量 初始化 表达式 未声明      更新时间:2023-09-26

我很难理解下面的代码片段(位于一个名为program.js的文件中)。我的问题是,我找不到在这个文件中声明和/或初始化CODERBOT_PROG_SAVEONRUN的位置。没有外部代码或库被导入。

我在这个项目的其他地方也遇到了同样的问题。这是JavaScript的一个奇怪的特性,还是我应该在其他地方寻找?

如果在给定的JavaScript文件中使用变量但未初始化和声明,我应该怎么想?

如果没有明显的"import"语句,它是从哪里来的?

function runProg() {
    var bot = new CoderBot();
    // Generate JavaScript code and run it.
    window.LoopTrap = 1000;  
    Blockly.Python.INFINITE_LOOP_TRAP = '  get_prog_eng().check_end()'n';
    var code = Blockly.Python.workspaceToCode();
    if(CODERBOT_PROG_SAVEONRUN) {
        Blockly.Python.INFINITE_LOOP_TRAP = null;
        var xml_code = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace);
        var dom_code = Blockly.Xml.domToText(xml_code);
        var data =  {'name': prog.name, 'dom_code': dom_code, 'code': code};
        try {
            $.ajax({url: '/program/save', data: data, type: "POST", success:function(){
                loadProgList();
            }});
        }catch (e) {
            alert(e);
        }
    }
    try {
        var data =  {'name': prog.name, 'code': code};
        $.ajax({url: '/program/exec', data: data, type: "POST"});
        $("#dialogRunning").popup("open", {transition: "pop"});
        setTimeout(statusProg, 1000);
    } catch (e) {
        alert(e);
    }
}

在JavaScript中,有全局上下文和由函数定义的局部上下文。如果变量没有在函数中定义,则在全局上下文中定义。在浏览器中,全局上下文是window;在该窗口中运行的所有脚本都共享相同的全局上下文。

您正在寻找的变量在templates/config_params.html中定义。它和program.js脚本都包含在templates/main.html中,这使得在显示该页面时每个脚本的全局变量对另一个可见。

看起来像是在这个文件中被初始化:https://github.com/CoderBotOrg/coderbot/blob/413491b566e675f8105b6494e3b80203c63d44c4/templates/config_params.html

我假设模板包含在页面的顶部,初始化所有常量,如CODERBOT_PROG_SAVEONRUN。这是向客户机公开服务器变量的一种方法。