Я уже давно общался с JavaScript, и каждый раз, когда я понимаю закрытие, я недавно ищу работу на переднем крае Интернета, поэтому мне нужно консолидировать фонд.
Эта статья относится к закрытию блога Joy_lee на основе ее блога и стремится объяснить мое понимание в форме комментариев. Если есть какая -то неуместность, приветствуются критика и исправление.
В расширенном программировании это сказано: когда другие функции определяются внутри функции, создается закрытие. Закрытие имеет разрешение на доступ к всем переменным, содержащимися в функции.
(Как вы понимаете это предложение? Согласно этому предложению, закрытие является вложенной функцией! Вложенная функция, конечно, может получить доступ к переменным функции, содержащей ее, и нет проблем.)
Вообще говоря, внутренние функции могут получить доступ к переменным на предыдущем уровне или даже на глобальном уровнях. Таким образом, некоторые люди понимают это: через закрытие может быть достигнут внешний доступ к переменным в локальной функции.
(Если мы просто делим область на один уровень, предположим, что глобальная область в качестве первого уровня, где внутренняя область тела определенной функции является вторым уровнем, а внутренняя область тела определенной функции вкладывается в рамки второго уровня как третий уровень и т. Д. В традиционном смысле, первый уровень не может получить доступ ко второму уровню (эта переменная называется локальной переменной), а второй уровень не может получить доступ к третьему уровню, и нацеленный цепь, который не может быть на третьем уровне, и то, что является тематическим, который не может быть, и который не может быть тематическим, который не может быть тематическим, который не может быть, и который не может быть применением. Объем этого уровня, а затем искал на предыдущем уровне до глобального уровня. Механизм сбора мусора.
Функция a () {var i = 0; функция b () {alert (++ i); } return b; } var c = a (); c ();То есть функция закрытия состоит в том, что после выполнения и возврата A закрытие делает механизм сбора мусора JavaScript GC не восстанавливать ресурсы, занятые A, поскольку выполнение внутренней функции B необходимо полагаться на переменные в A.
Из -за существования закрытия после функции A возвращается, я всегда существует. Таким образом, каждый раз, когда C () выполняется, я является значением I Alered после добавления 1.
Затем, если A не возвращает функцию B, ситуация совершенно другая. Поскольку после выполнения A B не возвращается во внешний мир A, но на это ссылается только A, и в настоящее время A будет ссылаться только B, поэтому на функции A и B ссылаются друг друга, но не нарушаются внешним миром (упоминаемые внешним миром), функции A и B будут переработаны GC.
На самом деле, именно закрытие расширяет жизненный цикл переменной. Обычно объем функции, то есть переменных, будет уничтожен после выполнения функции, но когда функция возвращает закрытие, если закрытие не будет выпущено, вся цепочка областей будет занимать память. (Закрытие расширяет жизненный цикл переменной, которая относится к делу о том, что их ссылается на первом уровне. Но без этой ссылки можно может назвать закрытие?)
Говоря о цепочке областей: то есть, собственная область функции, объем функции предыдущего слоя ... и глобальный объем. При доступе к переменной, если у вас ее нет, посмотрите на слой за слой до всего мира. Если у вас его еще нет, вы сообщите об ошибке.
(Я действительно хочу жаловаться, что цепочка прицела закрытия изогнута.)
PS: Некоторые пользователи сети порекомендовали другую статью для анализа концепции закрытия JavaScript . Это авторитетно? Наконец, есть четкая концепция:
Сказав так много, что такое закрытие? Давайте обобщу это ниже:
Закрытие - это концепция, которая описывает явление, в котором память находится после освобождения функции. Пока вы понимаете эту основную концепцию, закрытие не сложно понять.
Приведенная выше статья позволяет вам понять закрытие в одном предложении (простое и простое для понимания) - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.