表达式中使用未声明、未初始化的变量:怎么想?
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
。这是从服务器向客户端公开变量的一种方法。
我很难理解以下代码片段(位于名为 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
。这是从服务器向客户端公开变量的一种方法。