Я приведу пример не уверен, что это то, что вам нужно.
var completionHandler: (value: Float) -> ();
func printFloat(value: Float) {
println(value)
}
completionHandler = printFloat
completionHandler(value: 5)
Он просто печатает 5, используя объявленную переменную completionHandler
.
Когда мы вызываем new
для функции конструктора, она всегда возвращает новый объект, что означает, что когда client
был мутирован позже, теперь он определенно содержит новое значение. Это одна вещь.
Другое дело, что сборщик мусора среды выполнения javascript ищет объекты, которые находятся в памяти, но не ссылаются ни на одну из переменных, и, если они найдены, удаляет их.
Так, в основном, когда я делаю это,
let obj = {name: 'Hello'}
obj
ссылается на некоторый объект с 2ABCS
адресом памяти, и когда я изменяю его
let obj = {name: 'World'}
Теперь он ссылается на объект с адресом 1ABCS
, который делает 2ABCS
сиротой, что означает, что он будет удален сборщиком мусора
Подробнее читайте https://javascript.info/garbage-collection
В Javascript GC не представляет большой проблемы для потенциального злоупотребления информацией, доступной в объектах. Это сами объекты. С современными инструментами разработчика можно легко войти в любую часть кода переднего плана и понять его, если он не запутан. ИМО, в наши дни обфускация в значительной степени необходима. Во-первых, это уменьшает размер файла, а во-вторых, это затрудняет использование кода в производстве.
Теперь перейдем к актуальному вопросу. Как только новый экземпляр new Auth
назначен на client
, на старый экземпляр больше нет жестких ссылок со стороны client
, поэтому он имеет право на сборку мусора, если другие ссылки не хранятся. Нет гарантии, насколько быстро будет восстановлена память.
И преимущество использования let
заключается в его объеме. Это ограничено его блоком. Тем не менее, нередко иметь огромные блоки. По сравнению с глобальными переменными let
предлагает вам небольшую область действия и, следовательно, может быть выпущен вскоре после окончания блока. Может также случиться, что среда выполнения Javascript может использовать стек методов для переменных let
, и как только блок заканчивается (метод), он удаляет стек и, следовательно, ссылки также удаляются.
Наконец, абсолютно нормально, что так оно и есть, и ваша реализация не дает никаких преимуществ по сравнению с предыдущей.