@UserTrue привет, ошибка не в проксях была, но спасибо, что хотел помочь 😂
проблема при вызове функции
-
@smeckoi77 said in проблема при вызове функции:
Область действия меток - весь скрипт. Можно же предположить, что область действия - отдельная функция?
Чего ? Предположить можно что угодно. Я вообще не использую метки
-
@smeckoi77 said in проблема при вызове функции:
Можно же предположить, что область действия - отдельная функция?
Я, кстати, тоже считал, что метки имеют локальную область видимости(функция), а не глобальную(весь скрипт).
Но я не использую метки и не советую никому. Метки - это самый легкий способ выстрелить себе в ногу.
-
@sergerdn said in проблема при вызове функции:
Я, кстати, тоже считал, что метки имеют локальную область видимости(функция), а не глобальную(весь скрипт).
В бас вообще нет такого понятия как область видимости
-
@sergerdn said in проблема при вызове функции:
Не согласен, но холивар разводить не буду.
Аха, отличный аргумент. Вы экстрапалируете свои представления и ожидания с другим платформ/языков на БАС и потом удивляетесь, что в бас это так не работает, но в бас нигда не заявлено что в нем это должно работать подобным образом.
-
@UserTrue said in проблема при вызове функции:
Аха, отличный аргумент.
Вероятно, я имею право иногда высказывать свое мнение без аргументации.
@UserTrue said in проблема при вызове функции:
... что в бас это так не работает.
В режиме записи область видимости переменных глобальная, а в режиме запуска - локальная.
Метки в браузере имеют глобальную область видимости.
-
@sergerdn said in проблема при вызове функции:
В режиме записи область видимости переменных глобальная, а в режиме запуска - локальная.
Это тоже не верно в режиме записи работает только один поток, область видимости всегда в рамках потоках.
Что касается функции onApplicationStart то в запуске она тоже исполняется в отдельном потоке до запуска остальных функции, а в записи она исполняется в этом же потоке что и остальной код, это единственный нюанс который тут естьА что за метки в браузере я не знаю
-
@UserTrue said in проблема при вызове функции:
Это тоже не верно в режиме записи работает только один поток, область видимости всегда в рамках потоках.
Переменные меняют область видимости при:
- запуск в режиме записи(глобально по отношению к функциям)
- запуск в один поток (локально по отношению к функциям)
А есть еще отдельная глобальная область видимости для глобальных переменных. А еще есть область видимости ресурсов(глобальная).
Честно говоря не совсем понимаю, что ты так уцепился за мое мнение, что в BAS есть область видимости переменных.
-
@sergerdn said in проблема при вызове функции:
Честно говоря не совсем понимаю, что ты так уцепился за мое мнение, что в BAS есть область видимости переменных.
Потому что ее нет)) Глобальные переменные если только, но разговор был про области видимости функций.
Потом не удивляетесь что бас работает не так как вы думали xD
-
@UserTrue said in проблема при вызове функции:
Потому что ее нет)) Глобальные переменные если только, но разговор был про области видимости функций.
Глобальные переменные это и есть область видимости.
@UserTrue said in проблема при вызове функции:
В бас вообще нет такого понятия как область видимости
Я отвечал на это утверждение. Что, как минимум, существует область видимости в разрезе переменных и ресурсов, что тоже, впрочем переменные. Еще и метки, предположительно, всегда имеют глобальную область видимости.
Вероятно, ты имел в виду, что в BAS нет понятия область видимости функций. Мое мнение, что она есть и она всегда глобальная. Из любого места можно всегда вызвать любую функцию.
@UserTrue said in проблема при вызове функции:
Потом не удивляетесь что бас работает не так как вы думали xD
Безусловно, все мы люди и все мы ошибаемся. И никто не исключение.
Но почему ты взял на себя миссию в это топике обязательно меня убедить, что твое мнение должно совпадать с моим - мне не понятно.
Так как каждый человек имеет право на свое, пусть даже иногда и ошибочное, мнение.
-
@sergerdn said in проблема при вызове функции:
Я отвечал на это утверждение. Что, как минимум, существует область видимости в разрезе переменных и ресурсов, что тоже, впрочем переменные
Область видимости это как правило в первую очередь область видимости функции и процедур, затем циклов и условий, а также блоков.
Глобальные переменные это скорее частный случай уровня всего приложения. Что касается ресурсов то это вообще просто API для синхронной работы с общими данными. С тем же успехом можно назвать базу данных глобальной областью видимости.Мое мнение, что она есть и она всегда глобальная
Глобальная область видимости подразумевает наличие локальной, которой в БАС в сущности нет.Но почему ты взял на себя миссию в это топике обязательно меня убедить,
Нет у меня никакой миссии и философствовать на эти темы я не стану. Форум он то форум, что это место для дискуссий.
-
@UserTrue said in проблема при вызове функции:
Кроме того глобальная область видимости подразумевает наличие локальной, которой в БАС в сущности нет.
Вероятно, все таки есть локальная область видимости переменных.
Переменная, созданная внутри функции, видна только внутри функции, если это не режим записи в BAS.
Иначе говоря такая переменная имеет свою локальную(внутри функции) область видимости.Такая переменная, вероятно, уничтожается движком BAS, когда функция заканчивает работу. Уничтожений переменных внутри функции только предположение, настолько в исходники я не погружался.
-
@sergerdn said in проблема при вызове функции:
Переменная, созданная внутри функции, видна только внутри функции, если это не режим записи в BAS.
Иначе говоря такая переменная имеет свою локальную(внутри функции) область видимости.Если эта функция не асинхронная, которая в сущности является другим потоком, то область ее видимости так же весь поток
-
Какой то странный у вас получился спор.. Локальные переменные BAS видны в любых функциях в пределах одного потока, переменные js ограничены функцией в которой были объявлены.
Вот тестовый скрипт: 2808.xml
В нём есть функция "q" в которой объявляется переменная BAS [[NEW_VARIABLE]] и переменная js test. Обе переменные выводятся в лог для проверки:

В функции "Main" стоит вызов функции "q" и также вывод в лог обеих переменных:

В режиме "записи" логи в функции "q" и функции "Main" отработают корректно:

В режиме "запуска" в функции "q" сработают корректно оба лога, однако в функции "Main" корректно сработает вывод в лог только переменной BAS. Вывод переменной js вернёт ошибку:

Однако если в переменной js убрать "var", то эта переменная также будет корректно видна в функции "Main"


То есть технически переменные BAS это глобальные переменные js -
[[NEW_VARIABLE]] === VAR_NEW_VARIABLE -
@UserTrue said in проблема при вызове функции:
Если эта функция не асинхронная
Вероятно, у нас все таки отличия в трактовке терминов.
Когда я пишу функция - я имею в виду функцию, которую можно создать в IDE BAS, а не какие функции у себя BAS вызывает под капотом.
Я всегда считал, что такая функция в BAS не может быть синхронной или асинхронной, а может быть разным способ вызова функции - с ожиданием результата в том же потоке или запуске в фоне/не блокирующем основной поток режиме.
Может быть, что способ запуска функции, меняет область видимости переменных. Этот момент мне не известен.
Тут можно сделать вывод, что все таки, если что-то меняется, значит оно существует 😄
-
@Fox said in проблема при вызове функции:
Какой то странный у вас получился спор..
Изначально шла речь об отсутствии/наличии области видимости в BAS.
Потом уже перешли в какие именно области видимости есть и как они себя ведут. И, вероятно, даже как они должны называться.
Мое мнение - область видимости в BAS существует. Как минимум переменных.
У @UserTrue другое мнение(как минимум было в начале разговора):
@UserTrue said in проблема при вызове функции:
В бас вообще нет такого понятия как область видимости
-
@sergerdn said in проблема при вызове функции:
У @UserTrue другое мнение(как минимум было в начале разговора):
Оно и осталось (я просто пытался разжевать все нюансы), @fox тоже самое сверху написал, что есть область видимости потока и все. Ну область видимости js, или браузера это уже немного про другое.
-
@Fox said in проблема при вызове функции:
То есть технически переменные BAS это глобальные переменные js - [[NEW_VARIABLE]] === VAR_NEW_VARIABLE
Спасибо, никогда не задумывался, что переменные есть двух типов:
- [[NEW_VARIABLE]] === VAR_NEW_VARIABLE // BAS global var(global Javascript)
- [[NEW_VARIABLE]] === NOT_WAR_JUST_PEACE_NEW_VARIABLE // not BAS, but Javascript local var
-
@sergerdn said in проблема при вызове функции:
@Fox said in проблема при вызове функции:
То есть технически переменные BAS это глобальные переменные js - [[NEW_VARIABLE]] === VAR_NEW_VARIABLE
Спасибо, никогда не задумывался, что переменные есть двух типов:
- [[NEW_VARIABLE]] === VAR_NEW_VARIABLE // BAS global var(global Javascript)
- [[NEW_VARIABLE]] === NOT_WAR_JUST_PEACE_NEW_VARIABLE // not BAS, but Javascript local var
[[NEW_VARIABLE]] === WAR_NEVER_CHANGES_NEW_VARIABLE