JS Замыкания vs глобальные переменные vs сборщик мусора (тупой вопрос))
Привет полумертвый родной форум!))) Пытаюсь разобраться в основах Javascript и назрел вопрос. Во многих источниках пишут что замыкания - это одна из фундаментальных концепций js, но везде где пытаюсь разобраться что это такое не могу понять два момента:
1) Почему вместо замыканий нельзя точно так же пользоваться глобальными переменными для тех же задач? 2) Я правильно понял, что замыкания вносят проблемы в работу сборщика мусора, и переменные залипшие в замыкании остаются в памяти на неопределенное время и без возможности удаления. Где можно подробнее изучить этот вопрос? Я понял про лексический контекст выполнения, но не могу понять зачем этот прием использовать, в чем его преимущество перед другими? |
Ответ: JS Замыкания vs глобальные переменные vs сборщик мусора (тупой вопрос))
Цитата:
|
Ответ: JS Замыкания vs глобальные переменные vs сборщик мусора (тупой вопрос))
Цитата:
Все глобалы в js это св-ва суперобъекта window и можно с лёгкостью случайно переопределить уже существующее свойство. Вот их список: PHP код:
Про всё подряд можно почитать тут: https://jstherightway.org/ Сборник советов как правильно разрабатывать на js. |
Ответ: JS Замыкания vs глобальные переменные vs сборщик мусора (тупой вопрос))
Да, вопрос идеологический, но пример кода приведу. Из урока на хабре
PHP код:
Я хоть убейте не могу понять почему не проще завести глобал каунтер и увеличивать его в функции, вместо такой конструкции и самое главное - как я понял замыкание образуется за счет постоянного наличия локальной переменной (в данном коде numberOfCalls ) то в лексическом контексте, то в контексте выполнения, но в таком случае переменная, которая находится в замыкании никогда не будет удалена сборщиком (или нет? не нашел ответа нигде). Идеологически мне не понятен смысл применения замыканий. Если как говорит Randomize - для контекстного деления кода на блоки, и по сути "эмуляции" private переменных так? Или это все словоблудие? В каких случаях замыкания применять полезнее чем другие способы? |
Ответ: JS Замыкания vs глобальные переменные vs сборщик мусора (тупой вопрос))
PHP код:
|
Ответ: JS Замыкания vs глобальные переменные vs сборщик мусора (тупой вопрос))
Такой код разве не сработает? Или JS имеет ограничения?
PS: я реально не понимаю )) PHP код:
// ушел читать про замыкания и параметры функций дальше |
Ответ: JS Замыкания vs глобальные переменные vs сборщик мусора (тупой вопрос))
Да нет же. В твоём примере проблема в том, что ты делаешь постинкремент. То есть ты возвращаешь из функции предыдущее значение счётчика.
В общем глобальные переменные не нужно использовать хотя бы по той же причине, по которой это осуждается в других языках. Я, например, любой используемый код на html страницах оборачиваю в: PHP код:
Кстати сказать, функции являются переменными-объектами. Ты можешь даже свойства им назначать. Например: PHP код:
|
Ответ: JS Замыкания vs глобальные переменные vs сборщик мусора (тупой вопрос))
Цитата:
Цитата:
|
Часовой пояс GMT +4, время: 17:47. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot