Александр Мельник

Александр Мельник

Был в сети 15 февраля 2026, 18:37
Заказы не принимаю
Спасибо Николай что не прошли мимо.
Тоесть я так понимаю, что в классическом цикле for const не прокатит, изза того что мы переменную i на каждой иттерации увеличиваем, а значит нам нужна ссылка на нее в памяти?
Так плохо
for (const i = 0; i < 10; i++) {
            // do something
        }
а так хорошо
for (let i = 0; i < 10; i++) {
            //
        }
далее нельзя будет изменить ее тип
Ну скорее значение? Тип понятное дело не измениться если нельзя заменить даже значение, но Боже мой, а с каких пор js стал языком со строгой типизацией? Такое чувство что из него C++ начали делать.
Я продолжу задавать тут дилетантские вопросы по js.
А почему в таком вот цикле (объект user заранее создан)
for (const key in user) {
            if (user.hasOwnProperty(key)) {
                const element = user[key];
                console.log(element);
            }
        }
и key и element объявлены через const, хотя на каждой итерации они будут изменяться и при этом — ошибок не возникает?? Вот в моем понимании там может быть только let element =
да, я понимаю, поэтому и стараюсь «выбросить из головы» концепции php.
два момента только:
— в учебниках крайне мало уделяется внимания именно этому аспекту, поэтому и спрашиваю у более опытных.
— плюс мне кажется что js в браузере и js на сервере это немного разные вещи. У них одинаковый синтаксис но разная идеология, нет? node js это прежде всего процесс в операционной системе, он регистрируется как сервис (по крайней мере в линуксе) и понятное дело — работает постоянно. js в браузере — это лишь код, которые обрабатывается встроенным в браузер интерпретатором. И мне сложно представить что он единожды инициализируется и дальше работает.
спасибо. Я пользуюсь MDN, но больше как справочником, а не учебником.
Когда нужно понять как работает та или иная функция и так далее.
Все-таки учебник Кантора — это более учебное пособие, где после каждой главы есть закрепляющие занятия.
Не соглашусь Николай насчет неосновательности и не по порядку.
Хотя у меня уже есть начальные знания о javascript, я прохожу учебник
learn.javascript.ru/ пошагово, с первой главы. Иногда честно через силу, конкатенирую строчки, пишу if ы и прочий первоначальный синтаксис, хотя тянет сразу перейти к тому, что совсем прошло мимо меня — классы в js, модули, импорты экспорты и прочее. Но пока держу себя в руках.
вы правы, просто я не вижу ничего подобного в документации.

То что вы говорите, событие пользователя и прочее — все это асинхронность выполнения кода.
Есть вот такой сайт
latentflip.com/loupe/
на котором наглядно отображается так называемый event loop для javascript в браузере, видно как асинхронные события помещаются в апи браузера, ждут наступления события, в то время как основной поток идет себе синхронно и так далее. И если в nodejs код всегда асинхронный, то в браузере (насколько я понимаю) нет, он наоборот всегда синхронный. Иначе нам не приходилось бы добавлять атрибут defer при подключении скрипта. При условии что мы не создаем асинхронности сами — добавляем промисы, колбеки и так далее.
Поэтому мне казалось что было бы логично, что если весь код состоит из объявления и присвоения переменной, то после выполнения кода — прибить эту переменную в памяти. Но это так… лишь мои домыслы, а практика показывает что нет — все переменные продолжают храниться в оперативной памяти.

А в каком тогда случае очищается память? Это где то задокументировано, вам попадалась такая инфа? При перезагрузке страницы? При закрытии вкладки?
Разве не правильнее просто вызвать в сниппете событие, на которое подписан данный плагин?
docs.modx.com/current/en/extending-modx/plugins/system-events
Но наверное код сниппета можно получить и через $modx->getObject('какой там класс у плагинов', идентификатор плагина); Но выполнять его придется через eval()
До WeakMap я еще не дошел в этом учебнике, спасибо.
Знаете что еще немного удивляет в js — это отсутствие официальной документации.
Я ведь не ошибаюсь — ее нет? У php есть php.net документация на котором ведется разработчиками, у python есть python.org, но я не встречал официального сайта по js (ну и кстати по CSS тоже). Есть learn.javascript есть mozilla MDN (но mozilla само по себе open source сообщество и это как я понимаю просто ребята молодцы и своими силами собирают в одном месте информацию), есть кучи статей на хабре или видео на ютубе, но ни одного сайта не видел который можно было назвать официальным и первоисточником.
спасибо Иван, но все эти статьи о разницах между const, var let а ведь мой вопрос был не о них.
Я хочу понять как работает сборка мусора в javascript и какой жизненный цикл переменных в браузере, в какой момент очищается оперативная память, выделенная под определенную переменную и так далее.
я пытался сам себе пояснить, что мол глобально объявленные переменные становятся свойствами объекта window, а этот объект живет столько сколько открыто окно.
Но нет.
«современный синтаксис» задания переменных не помещает их в свойства window.
<body>
    <h2>Objects</h2>
    <script>
        'use strict'
        const test1 = 1;
        let test2 = 2;
        var test3 = 3;

        const user = {
            name: 'alex',
            age: 40
        };
    </script>
</body>
Только test 3 заданная через устаревший var попала в window. Остальные переменные — нет. А значит почему они «живы» мне не ясно)
Верно, соглашусь с Антоном. Как это сделать вам написали, далее все зависит от вашей логики, вернее от логики вашей программы и
есть свои причины
Наверное нужно добавить только одно — удалить ресурс при помощи такого кода сможет только администратор (пользователь имеющий право запуска процессоров), а вот гость с фронтенда — не сможет.
«скорее всего дело в том, что у вас верстка выполнена с ошибками стандарта.
инпут не должен находиться внутри тега лейбел.» — хотел написать я, а потом открыл
developer.mozilla.org/ru/docs/Web/HTML/Element/label
и увидел что можно и так и так )

Попробуйте вообще убрать айдишник с лейбла, поскольку если инпут у него внутри, то он не нужен.
ajaxform в случае успешной отправки делает reset для формы и видимо в этот момент что-то идет не так.
Попробуйте просто в консоли браузера получить свою форму и вызвать у нее метод reset