我很难理解以下代码段(位于名为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);
}
}
答案 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
。这是将变量从服务器暴露给客户端的一种方法。