0

Я пытаюсь понять следующий фрагмент кода (находится в файле с именем program.js. Моя проблема в том, что я не могу найти, где CODERBOT_PROG_SAVEONRUN объявлен и/или инициализирован в этом файле. Никакой внешний код или библиотека не кажется быть импортируемым.Необъявленные, неинициализированные переменные, используемые в выражениях: что думать?

Я бег в том же номер и во многих других местах, в частности thisproject. это причудливая особенность JavaScript, или есть где-то еще, что я должен искать?

Что должно Я думаю, если переменная используется, но не инициализирована и не объявлена ​​в данном файле JavaScript?

Откуда это происходит, если нет очевидного заявления «импорта»?

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); 
    } 
} 

ответ

1

В JavaScript есть глобальный контекст и локальные контексты, определяемые функциями. Если переменная не определена внутри функции, она определяется в глобальном контексте. В браузере глобальный контекст: window; все сценарии, которые вы запускаете в этом окне, имеют один и тот же глобальный контекст.

Переменная, которую вы ищете, определена в templates/config_params.html. И это, и сценарий program.js включены от templates/main.html, что делает глобальные переменные каждого видимыми для другого при отображении этой страницы.

+0

Я должен подождать 4 минуты, чтобы принять этот ответ. Как ты так быстро работал? XD Я почесал голову на него для AGES – TheIronKnuckle

+0

Первый абзац, сделав JS чуть больше 2 недель. Второй, используя функцию поиска GitHub. :) – Amadan

1

Похоже, он инициализируется в этом файле: https://github.com/CoderBotOrg/coderbot/blob/413491b566e675f8105b6494e3b80203c63d44c4/templates/config_params.html

Я предполагаю, что шаблон включен в верхней части страницы, инициализирует все константы, такие как CODERBOT_PROG_SAVEONRUN. Это один из подходов к представлению переменных с сервера клиенту.

Смежные вопросы