Видимость: 🌟🌟🌟🌟🌟
Вкус: Ледяной арбуз
Время приготовления: 20мин
Первое практическое правило заключается в том, что девочкам нравятся сказки.
Начнем со сказки~
// 有一个公主
// 她生活在一个充满冒险的奇妙世界里
// 她遇见了她的白马王子,带着她骑着独角兽环游世界
// 与龙搏斗,遇到了会说话的松鼠,以及许多其他幻想的事情。
function princess () {
var adventrures = [];
function princeCharming () {};
var unicorn = {};
var dragons = [];
var squirrel = "Hello!";
// 但她不得不回到她那充满家务和大人们的单调世界。
return {
// 她经常给身边的人讲她作为一个公主的奇妙经历。
story:function () {
return adventures[adventures.length - 1];
}
}
}
// 但他们看到的只是一个小女孩在讲述关于魔法和幻想的故事
var littleGril = princess();
littleGril.story();
// 即使大人们知道她是真正的公主,他们也不会相信所谓的独角兽或龙,因为他们永远看不到它们
// 大人们说它们只存在于小女孩的想象中
// 但我们知道真正的真理
// 里面的小女孩真的是个公主
Эта история происходит отОтвет на stackoverflow, не важно, если вы этого не понимаете.Прочитав эту статью, оглянитесь на эту историю, и вы обнаружите, что полностью поняли мое обаяние, каш@¥%#…………JavaScriptОчарование среднего закрытия.
Что такое закрытие?
当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。 --- 你不知道的JavaScript(上卷)
приходи 🌰
function demo() {
var a = 1;
return function () {
return a;
}
}
var a = demo();
console.log(a()); // 1
Состав закрытия
Закрытие состоит из двух частей:функцию и среду, в которой она была создана.
Среда состоит из любых локальных переменных, которые были в области видимости при создании замыкания.
Характер закрытия
Закрытия на самом делеJavaScriptПобочные эффекты продуктов объема функции.
Замыкание — это особый вид объекта.
так называемый有意栽花花不开,无心插柳柳成荫,нетJavaScriptЗамыкания используются преднамеренно, но из-заJavaScriptВы можете использовать переменные вне функции внутри функции, и этот код сноваВ самый разСоответствует определению замыкания.
существуетJavaScript, переменные объекты должны быть уничтожены после вызова внешней функции, но замыкание предотвращает их уничтожение, и мы по-прежнему можем получить доступ к переменным объектам внешней функции.
Далее, как правило, область действия функции и все ее переменные уничтожаются после завершения выполнения функции. Однако если замыкание создается, область действия функции сохраняется до тех пор, пока замыкание не исчезнет.
function addCalculator (x) {
return function (y) {
return x + y;
}
}
var add1 = addCalculator(1);
console.log(add1(1)); //2
// 释放对闭包的引用
add1 = null;
console.log(add1(1)); //Uncaught TypeError: add1 is not a function
Применение затворов
Что мы можем сделать с замыканиями?
К пониманиюJavaстуденты могут знать, чтоJavaОн поддерживает приватные методы, которые могут быть вызваны только другими методами класса, ноJavaScriptДля этого нет встроенной поддержки, поэтому мы можем имитировать приватные методы через замыкания.
Частные методы, естественно, имеют преимущества частных методов.Частные методы помогают ограничить доступ к коду и могут предотвратить вмешательство неосновных методов в общедоступный интерфейс кода, уменьшая глобальное загрязнение.
приходи 🌰
var calculator = (function(){
var a = 1;
function addCalculator(val){
a += val
}
return {
add1:function() {
addCalculator(1);
},
add2:function() {
addCalculator(2);
},
result:function() {
return a
}
}
})();
console.log(calculator.result()); // 1
calculator.add1();
console.log(calculator.result()); // 2
calculator.add2();
console.log(calculator.result()); // 4
Вышеупомянутый метод также называетсяшаблон модуля.
Примечания по использованию замыканий
утечка памяти
Поскольку замыкание может держать переменные в функции в памяти, вызывая большое потребление памяти, поэтому, если это не какие-то конкретные задачи, требующие использования замыкания, мы не должны злоупотреблять этим.
Об этом упоминалось во многих блогах, но это не совсем так.
Стучите по доске! ! !
Неправильное использование затворов можетIE(IE9)Ранее вызывал утечку памяти. потому что этоJavaScriptАлгоритм сборки мусора, используемый движком, представляет собой метод подсчета ссылок, который приводит к циклическим ссылкам.GC(описано ниже) Мусор нельзя перерабатывать.
Подробнее о тестировании закрытия в каждом браузере см.Situ Zhengmei - тест на закрытие js
механизм сбора мусора
Это было 9102 лет, и вся страна начала реализовывать классификацию мусора. Вы еще не знаете механизм коллекции мусора. Приходите и узнайте это!
сбор мусораGC(Garbage Collection).
GCОбращайтесь с неиспользуемым пространством памяти программы как с мусором, находите их и освобождайте, чтобы программист мог снова использовать эту часть пространства.
не все языки естьGC, который обычно существует в языках высокого уровня, таких какJava,JavaScript,Python. тогда безGCВ мире программистов сложнее, и они могут управлять памятью только вручную, например, вCНа языке мы можем пройтиmalloc/free,существуетC++серединаnew/deleteсправляться.
Алгоритм сборки мусора
Поскольку в этой части много контента, эта статья дает только краткое объяснение.Если вы хотите глубже понять алгоритм сборки мусора, вы можете получить учебные материалы в конце статьи.
Алгоритм маркировки GC
первый в мире памятныйGCАлгоритмGC标记-清除算法. Потому что это все еще отличный алгоритм для всех видов программ обработки с момента его создания, полвека спустя.
GC标记-清除算法Он состоит из фазы маркировки и фазы очистки.Фаза маркировки соответствующим образом помечает все активные объекты, а фаза очистки повторно использует немаркированные объекты, то есть неактивные объекты. При поиске объектов и их маркировке используется поиск в глубину, а древовидная структура просматривается максимально глубоко.
преимущество:
1. Алгоритм прост и легко реализуем.
2. Совместимость с консервативными алгоритмами GC.
недостаток:
1. Во время использования произойдет фрагментация, т.к.
Windowsтак же, как и файловая система, что приводит к Бесчисленные маленькие кусочки разбросаны по всей куче.2. Скорость распределения, из-за разрыва блоков алгоритму необходимо проходить свободный связанный список каждый раз, когда он выделяет, чтобы найти достаточно большой блок, поэтому в худшем случае нужно пройти до конца, чтобы найти подходящий блок. блок, который влияет на скорость выделения.
подсчет ссылок
Этот метод вводит понятие счетчика, а «индекс популярности» объекта представлен счетчиком, то есть количеством программ, ссылающихся на объект. Когда счетчик (счетчик ссылок) равен 0, мусор собирается немедленно.
преимущество:
1. Мусор можно сразу переработать.
2. Максимальное время паузы короткое.
3. И нет необходимости искать указатель.
недостаток:
1. Циркулярная ссылка, упомянутая выше, не может быть использована повторно.
2. И это сложно реализовать.
3. Обработка увеличения и уменьшения значения счетчика очень тяжелая.
4. При этом счетчик должен занимать много бит, что сильно снижает эффективность использования пространства памяти.
В программной инженерии нет серебряной пули, эти недостатки также имеют соответствующие решения, если вы хотите узнать больше об алгоритме сборки мусора, вы можете купитьАлгоритм и реализация сборки мусораДля чтения этой книги рекомендуется поддерживать подлинную версию.
Добро пожаловать, чтобы обратить внимание на мою личную общедоступную учетную запись, статьи будут отправляться синхронно, и вы можете бесплатно получать массивные учебные материалы, отвечая на [Благополучие] в фоновом режиме.
Ваша передовая столовая, не забывайте есть вовремя.
PS: Вы также можете ответить в фоновом режимевывоз мусораВы можете получить копию соответствующей информации~