在表达式中使用未声明的,未初始化的变量:要考虑什么?

时间:2015-09-16 03:25:53

标签: javascript variables scope initialization variable-declaration

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

我在this特定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);
    }
}

2 个答案:

答案 0 :(得分:1)

在JavaScript中,有一个全局上下文,以及由函数定义的本地上下文。如果未在函数内定义变量,则在全局上下文中定义变量。在浏览器中,全局上下文为http://localhost:8080/your_war_name/ ;您在该窗口中运行的所有脚本共享相同的全局上下文。

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

答案 1 :(得分:1)

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

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