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

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

我很难理解以下代码片段(位于名为 program.js 的文件中)。 我的问题是我找不到在此文件中初始化 CODERBOT_PROG_SAVEONRUN 的位置 and/or。 似乎没有导入外部代码或库。

我 运行 在 this particular project 的许多其他地方遇到了同样的问题。 这是 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;您 运行 在那个 window 中的所有脚本共享相同的全局上下文。

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

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

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