Глобальная переменная

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Dschever, 29 ноя 2016.

  1. Dschever

    Dschever Нерд

    Необходимо сделать глобальную переменную через функцию к премеру XxX
    window.XxX =null; такой подход тут не работает, window не найден
    Как можно создать глобальную переменную в Искре?
    И как создать глобальные переменные через цикл с порядковым номером?
    Раз window не работает, то и window["R"+i]=i; не работает
     
  2. mcureenab

    mcureenab Гуру

    Automatically Global
    If you assign a value to a variable that has not been declared, it will automatically become a GLOBAL variable.
     
  3. Morgan

    Morgan Гик

    Переменная window существует только в браузере и хранит в себе DOM-дерево.
    В Iskra JS нет DOM, и window нет.

    Глобальную переменную можно создать, написав
    Код (Javascript):

    var myCoolNumber = 4;
    var coolArray = [];
    var cars = ["Saab", "Volvo", "BMW"];
     
    Ещё гляньте наши ролики по JS в микроконтроллере:

     
    Mihail Vasilev нравится это.
  4. mcureenab

    mcureenab Гуру

    function f
    {
    var i = 0;
    window = {};
    window["R"+i]=i;
    }
     
  5. Dschever

    Dschever Нерд

    Я посмотрел все уроки по Искре, и то что вы предлогаете ни как не отвечает на вопрос
    "как создать глобальную переменную через функцию"
    Пока был на работе набирал в перерывах библиотеку для сдвигового регистра, через браузер конечно все работает
    Вот часть кода чтоб было понятней
    Код (Javascript):

    function Create_Pin(i){
       for(n=0; n<i;n++){
            Arr_Pin.push(0, 0, 0, 0, 0, 0, 0, 0);
       }
       for(p=0;p<i*8;p++){
           window["R"+p]=new SuperPin (p);
        }
    }
    SuperPin.prototype.write= function(on_off){}
    Поуберал почти все, чтобы не мешало.

    Таким образом вызываем Create_Pin закидываем в него количество регистров к примеру 2 Create_Pin(2), так получаем 16 пинов R0-R15 и метод R0.write (1) включит питание на ножке q0
     
  6. Dschever

    Dschever Нерд

    Мммм... не подходит..
    Так все пины просто вызываються P0.write(1) а R0будет так window.R0.write(1)
    Мне так не нравиться
     
  7. mcureenab

    mcureenab Гуру

    Последнее редактирование: 30 ноя 2016
    ИгорьК и Dschever нравится это.
  8. Dschever

    Dschever Нерд

    Спасибо) посмотрел по этой ссылке, думал больше подробностей будет
    В общем результат такой
    global["R"+i]= new SuperPin(p) работает как надо)
     
  9. Dschever

    Dschever Нерд

    Как допишу скину, может кому пригодиться или поправит кто
     
  10. Mihail Vasilev

    Mihail Vasilev Нерд

    Так у вас область видимости у переменной window - контекст вызова функции.
    Вы создайте глобальную переменную глобально, а значения в нее уже добавляйте локально. Не?
     
  11. Dschever

    Dschever Нерд

    Ркгистров можно подключить много и количество переменных n*8, зачем создавать к примеру 64 переменных, если в этот раз будет использоваться только один сдвиговый регистр?
     
  12. mcureenab

    mcureenab Гуру

    На каждый пин целый объект заводить? Идея симпатичная, но расточительная.
    Есть вероятность, что разные библиотеки пересекутся идентификаторами в глобальном пространстве имен.
    Человек, или процессор, незнакомый с вашей библиотекой не сразу поймет откуда взялись глобальные переменные Rx.
     
  13. Dschever

    Dschever Нерд

    Хорошее замичание, идея была такова, чтобы использовать пины Rx приблежонно к стандартным пинам. Думаю, сегодня-завтра закончу и выложу, может возникнут у когото дополнительные идеи, мне интересно ваше мнение, надеюсь вы посмотрите
     
  14. DrOnJD

    DrOnJD Нерд

    И чем не подходит следующее?
    Код (Javascript):

    var window = [];
    function Create_Pin(i){
       for(n=0; n<i;n++){
            Arr_Pin.push(0, 0, 0, 0, 0, 0, 0, 0);
       }
       for(p=0;p<i*8;p++){
           window["R"+p]=new SuperPin (p);
        }
    }
    SuperPin.prototype.write= function(on_off){}
     
    ИгорьК нравится это.
  15. ИгорьК

    ИгорьК Гуру

    Arr_Pin.push... Arr_Pin - без объявления. Почему?
     
  16. Dschever

    Dschever Нерд

    Это только часть кода, она объявлена
     
  17. Dschever

    Dschever Нерд

    чуть выше было почти тоже самое, я уже ответил почему меня не устраивает
    Формулировка в данном случае будет window [Rx].writre (1) а не Rx.write (1)
     
  18. DrOnJD

    DrOnJD Нерд

    Мысль ясна. То что вы делаете, в среде программистов называется BadPractice. Т.е. вы забиваете пространство имен. Туда по возможности лучше ничего не записывать, максимум корневой объект вашего приложения. Иначе этот код лучше не выкладывать на всеобщий суд.

    И Вы уже спросите -"а какая разница, ведь приложение работает". А я Вам отвечу, что каменный топор тоже рубит, но лучше его сделать из легированной стали, провести термическую обработку и проковать. Т.е. есть устоявшиеся стандарты и они написаны убытками крупных и не очень разработчиков. Но конечно это дело сугубо личное.
     
    Последнее редактирование: 1 дек 2016
  19. Dschever

    Dschever Нерд

    Спасибо за наставление, именно поэтому мне и хочется выложить, чтоб получить больше толковых советов
     
  20. DrOnJD

    DrOnJD Нерд

    Справедливо