在表达式中使用未声明、未初始化的变量:该怎么想?
Undeclared, uninitialised variables being used in expressions: what to think?
我很难理解下面的代码片段(位于一个名为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
。这是向客户机公开服务器变量的一种方法。
相关文章:
- 使用名称初始化 ng-app 会禁用变量初始化
- 使用变量初始化数组:意外的令牌 +
- 使用变量初始化javascript数组
- 使用jQuery.when时进行了奇怪的变量初始化
- 使用angularjs范围变量初始化javascript变量
- 异步角度承诺和变量初始化
- JavaScript 变量初始化显示 NaN
- 使用静态变量初始化同一类中的变量
- JavaScript 中正确的“私有”变量初始化
- 角度 - 全局变量初始化一次 - 页眉中的示例用户名
- 角度变量初始化
- 对象变量初始化
- Snap SVG - 我可以使用多个变量初始化 snap.svg 指向标记中的不同 svg ID 吗?
- 使用 PHP 变量初始化选择标签
- JavaScript 在没有全局变量初始化值的情况下得到错误
- Javascript变量初始化
- AngularJS-$rootScope变量初始化失败
- Javascript 变量初始化语法
- 在变量初始化时运行代码
- 为什么这个变量初始化不对数字生效?