Если ещё один нолик добавить к размеру массива, то владка ложится с сообщением о нехватке памяти. Хотел таким образом спровоцировать сборщик мусора на активную работу. Получилось только браузер нагрузить
Вот если бы две последних строки в блок завернули. То, всё было бы мило
Не совсем вкурил, а как блоки тут влияют?
Но, сборщик ведь убил те два объекта?
Да, разумеется. В примере со вторым большим объектом, иногда при первом открытии страницы, сборщик убивает их практически сразу после завершения загрузки. Но при перезагрузках уже этого воспроизвести не удаётся и они удаляются только спустя какое-то время
elem находится в блоке и будет удален. Соответственно DOM объект будет без внешних ссылок и сборщик его прибьёт. Через некоторое время будет об этом сообщение
Попробовал Ваш код. Сборщик срабатывает прям не быстро, где-то через минуту или даже немного больше. То есть какой-то детерминированности тут нет. И если иметь дело с реальным кодом, а не лайтовыми демонстрациями, приложение будет лагать, пока сборщик не очухается. Но идея интересная, спасибо Вам)
Но есть ряд выражений, где если явно не отделять точкой запятой, то будет баг
Мне тоже о таком известно. В частности не рекомендовал бы пренебрегать точками с запятой если код пишется в теге <script>, особенно если его ещё и генерит какой нибудь PHP, добавляя свои вставки. Тут запросто разрыв строки, который в файле есть, в браузере может потеряться и вызвать ошибку. В остальном пока проблем в коде без точки с запятой, пока не встречал
по сути - «приватная переменная в классе»? у-а-у, как круууто... джаваскриптеры создали приватные переменные
По сути всё так. JavaScript лишь частично и очень специфично реализует ООП. Многим кто привык к ООП в более классическом варианте, это не нравится и для них придумали TypeScript. Замыкания это лишь один из вариантов как на JS можно декомпозировать код с инкапсуляцией состояния
автор из идейных соображений не завершает выражения точкой с запятой
В JavaScript этот момент опционален, так что я её и не использую. Мне и так понятно: кончилась строка, кончилось выражение, точка с запятой лишняя и код без неё становится только лучше, аки питоновский
Как вы получили доступ к переменной в замыкании из консоли?
Очень просто, в коде же есть точка остановы во внутренней функции, так что все переменные существующие на момент остановки, будут доступны в консоли. Но в целом проблему неочевидности этого понял и текст поправил. Спасибо за замечание)
Искренне не понимаю этой претензии. Может из-за уровня духоты в помещении где Вы находитесь, Вам плохо видно монитор, но это лайтовая гиговская площадка, а не серьёзный научный журнал с рецензированием. Тут нет требований к абсолютной уникальности тем. К тому-же пробегался по некоторым статьям на тему в хабре. И там по сути, был унылый и сухой копипаст с мозилы, написанный в духе инструкции к кофеварке. Я решил зайти с несколько другой стороны, взглянув на замыкания более широко
Вот да. Ладно бы я про это ещё не написал, то претензия была бы хоть сколько-то уместна. Но в статье есть отдельный блок о TDZ, но судя по всему @eandr_67 только вступительный абзац осилил
Использовать функции до их объявления можно во множестве языков программирования
То что функцию можно вызвать раньше её объявления, это неравно всплытию в JavaScript. Просто компилятор пыхи добр и снисходителен к инвалидам по уму. А с переменными сработает?
там идея в том что память общая и потоки могут в ней работать одновременно и возможны гонки?
Да, ситуация в которой 2 потока могут обращаться к одной и той-же области памяти имеет риск возникновения гонок. Собственно обезопаситься от таких ситуаций можно при помощи Atomics
Если ещё один нолик добавить к размеру массива, то владка ложится с сообщением о нехватке памяти. Хотел таким образом спровоцировать сборщик мусора на активную работу. Получилось только браузер нагрузить
Не совсем вкурил, а как блоки тут влияют?
Да, разумеется. В примере со вторым большим объектом, иногда при первом открытии страницы, сборщик убивает их практически сразу после завершения загрузки. Но при перезагрузках уже этого воспроизвести не удаётся и они удаляются только спустя какое-то время
Теперь всё точно понял. Спасибо Вам)
Попробовал изменить Ваш пример добавив ещё один большой массив в конце:
Страница начинает мощно тупить, комп готовится на взлёт, а сообщения от
FinalizationRegistry(), всё так-же появляются с около минутной задержкойТочняк. Наверное потому что arr не используется в замыкании, а вот если его там задействовать то он появится в
Scopes:Видимо у всех замыканий внутри функции общее окружение
Пустая внутренняя функция тащит за собой всё окружение родителя без разбору. Прикольно чё. Спасибо Вам)
Попробовал Ваш код. Сборщик срабатывает прям не быстро, где-то через минуту или даже немного больше. То есть какой-то детерминированности тут нет. И если иметь дело с реальным кодом, а не лайтовыми демонстрациями, приложение будет лагать, пока сборщик не очухается. Но идея интересная, спасибо Вам)
Мне тоже о таком известно. В частности не рекомендовал бы пренебрегать точками с запятой если код пишется в теге <script>, особенно если его ещё и генерит какой нибудь PHP, добавляя свои вставки. Тут запросто разрыв строки, который в файле есть, в браузере может потеряться и вызвать ошибку. В остальном пока проблем в коде без точки с запятой, пока не встречал
Поправил. Спасибо за замечание
По сути всё так. JavaScript лишь частично и очень специфично реализует ООП. Многим кто привык к ООП в более классическом варианте, это не нравится и для них придумали TypeScript. Замыкания это лишь один из вариантов как на JS можно декомпозировать код с инкапсуляцией состояния
В JavaScript этот момент опционален, так что я её и не использую. Мне и так понятно: кончилась строка, кончилось выражение, точка с запятой лишняя и код без неё становится только лучше, аки питоновский
Просто юмор, подрезанный мной из слега SEOшников
Очень просто, в коде же есть точка остановы во внутренней функции, так что все переменные существующие на момент остановки, будут доступны в консоли. Но в целом проблему неочевидности этого понял и текст поправил. Спасибо за замечание)
Искренне не понимаю этой претензии. Может из-за уровня духоты в помещении где Вы находитесь, Вам плохо видно монитор, но это лайтовая гиговская площадка, а не серьёзный научный журнал с рецензированием. Тут нет требований к абсолютной уникальности тем. К тому-же пробегался по некоторым статьям на тему в хабре. И там по сути, был унылый и сухой копипаст с мозилы, написанный в духе инструкции к кофеварке. Я решил зайти с несколько другой стороны, взглянув на замыкания более широко
Спасибо больше. Поправил)
А тут что не так?
В том и суть JS, он создан чтобы изумлять)
Вот да. Ладно бы я про это ещё не написал, то претензия была бы хоть сколько-то уместна. Но в статье есть отдельный блок о TDZ, но судя по всему @eandr_67 только вступительный абзац осилил
То что функцию можно вызвать раньше её объявления, это неравно всплытию в JavaScript. Просто компилятор пыхи добр и снисходителен к инвалидам по уму. А с переменными сработает?
Да. Спасибо Вам. Поправил
Да, ситуация в которой 2 потока могут обращаться к одной и той-же области памяти имеет риск возникновения гонок. Собственно обезопаситься от таких ситуаций можно при помощи Atomics
Неразделённая)