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

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

С нами с 02 сентября 2016; Место в рейтинге пользователей: #52
15 октября 2020, 20:01
0
Спасибо Николай что не прошли мимо.
Тоесть я так понимаю, что в классическом цикле for const не прокатит, изза того что мы переменную i на каждой иттерации увеличиваем, а значит нам нужна ссылка на нее в памяти?
Так плохо
for (const i = 0; i < 10; i++) {
            // do something
        }
а так хорошо
for (let i = 0; i < 10; i++) {
            //
        }
далее нельзя будет изменить ее тип
Ну скорее значение? Тип понятное дело не измениться если нельзя заменить даже значение, но Боже мой, а с каких пор js стал языком со строгой типизацией? Такое чувство что из него C++ начали делать.
15 октября 2020, 17:59
0
Я продолжу задавать тут дилетантские вопросы по js.
А почему в таком вот цикле (объект user заранее создан)
for (const key in user) {
            if (user.hasOwnProperty(key)) {
                const element = user[key];
                console.log(element);
            }
        }
и key и element объявлены через const, хотя на каждой итерации они будут изменяться и при этом — ошибок не возникает?? Вот в моем понимании там может быть только let element =
14 октября 2020, 21:00
0
да, я понимаю, поэтому и стараюсь «выбросить из головы» концепции php.
два момента только:
— в учебниках крайне мало уделяется внимания именно этому аспекту, поэтому и спрашиваю у более опытных.
— плюс мне кажется что js в браузере и js на сервере это немного разные вещи. У них одинаковый синтаксис но разная идеология, нет? node js это прежде всего процесс в операционной системе, он регистрируется как сервис (по крайней мере в линуксе) и понятное дело — работает постоянно. js в браузере — это лишь код, которые обрабатывается встроенным в браузер интерпретатором. И мне сложно представить что он единожды инициализируется и дальше работает.
14 октября 2020, 09:23
0
Ничего себе, выглядит удобно. Спасибо что поделились.
12 октября 2020, 22:18
0
спасибо. Я пользуюсь MDN, но больше как справочником, а не учебником.
Когда нужно понять как работает та или иная функция и так далее.
Все-таки учебник Кантора — это более учебное пособие, где после каждой главы есть закрепляющие занятия.
12 октября 2020, 20:04
0
Не соглашусь Николай насчет неосновательности и не по порядку.
Хотя у меня уже есть начальные знания о javascript, я прохожу учебник learn.javascript.ru/ пошагово, с первой главы. Иногда честно через силу, конкатенирую строчки, пишу if ы и прочий первоначальный синтаксис, хотя тянет сразу перейти к тому, что совсем прошло мимо меня — классы в js, модули, импорты экспорты и прочее. Но пока держу себя в руках.
12 октября 2020, 19:49
0
Хотя выбирая между Мининым и Лавриком… даже не знаю. Наверное остановлюсь на Лаврике, у него педагогический талант.
12 октября 2020, 19:48
0
пробежал одним глазом,
я имел в виду, что нет времени сейчас серьезно изучить и на выходных прочту и вникну.
12 октября 2020, 19:46
0
Спасибо) Как раз из видео Минина я и узнал о том, как работает event loop и асинхронность в js )
www.youtube.com/watch?v=vIZs5tH-HGQ
12 октября 2020, 18:36
0
пробежал одним глазом, выглядит вкусно! спасибо.
12 октября 2020, 15:47
0
вы правы, просто я не вижу ничего подобного в документации.

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

А в каком тогда случае очищается память? Это где то задокументировано, вам попадалась такая инфа? При перезагрузке страницы? При закрытии вкладки?
12 октября 2020, 08:41
0
Разве не правильнее просто вызвать в сниппете событие, на которое подписан данный плагин?
docs.modx.com/current/en/extending-modx/plugins/system-events
Но наверное код сниппета можно получить и через $modx->getObject('какой там класс у плагинов', идентификатор плагина); Но выполнять его придется через eval()
12 октября 2020, 08:29
0
До WeakMap я еще не дошел в этом учебнике, спасибо.
Знаете что еще немного удивляет в js — это отсутствие официальной документации.
Я ведь не ошибаюсь — ее нет? У php есть php.net документация на котором ведется разработчиками, у python есть python.org, но я не встречал официального сайта по js (ну и кстати по CSS тоже). Есть learn.javascript есть mozilla MDN (но mozilla само по себе open source сообщество и это как я понимаю просто ребята молодцы и своими силами собирают в одном месте информацию), есть кучи статей на хабре или видео на ютубе, но ни одного сайта не видел который можно было назвать официальным и первоисточником.
12 октября 2020, 08:11
0
спасибо. действительно, я изучаю js сквозь призму знаний о php и это сбивает с толку. В моем понимании раз скрипт отработал, то зачем же все значения переменных остались лежать в оперативной памяти.
11 октября 2020, 23:37
0
спасибо Иван, но все эти статьи о разницах между const, var let а ведь мой вопрос был не о них.
Я хочу понять как работает сборка мусора в javascript и какой жизненный цикл переменных в браузере, в какой момент очищается оперативная память, выделенная под определенную переменную и так далее.
11 октября 2020, 18:49
0
я пытался сам себе пояснить, что мол глобально объявленные переменные становятся свойствами объекта 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. Остальные переменные — нет. А значит почему они «живы» мне не ясно)
11 октября 2020, 17:36
0
Верно, соглашусь с Антоном. Как это сделать вам написали, далее все зависит от вашей логики, вернее от логики вашей программы и
есть свои причины
Наверное нужно добавить только одно — удалить ресурс при помощи такого кода сможет только администратор (пользователь имеющий право запуска процессоров), а вот гость с фронтенда — не сможет.
09 октября 2020, 14:56
0
«скорее всего дело в том, что у вас верстка выполнена с ошибками стандарта.
инпут не должен находиться внутри тега лейбел.» — хотел написать я, а потом открыл
developer.mozilla.org/ru/docs/Web/HTML/Element/label
и увидел что можно и так и так )

Попробуйте вообще убрать айдишник с лейбла, поскольку если инпут у него внутри, то он не нужен.
ajaxform в случае успешной отправки делает reset для формы и видимо в этот момент что-то идет не так.
Попробуйте просто в консоли браузера получить свою форму и вызвать у нее метод reset
05 октября 2020, 12:02
0
Но лучше пока есть резервные копии в которых все работало — откатиться к ним. А потом уже сделать тестовую версию сайта и на ней пробовать отключать компонент.
05 октября 2020, 11:58
0
значит только в базе данных нужно искать в таблице с системными настройками.