Пока листья не пожелтеют
Началась военная подготовка первокурсников. Мы с соседкой по комнате пришли на площадку рано, а одноклассники приходили один за другим. Я все искала ее тень в толпе, и долго не могла увидеть, как она разговаривает и смеется со своей соседкой по комнате и Она идет к нам... Да ладно, ее светлая кожа, слезящиеся глаза и камуфляж военной подготовки не могут скрыть ее красоту, особенно когда она улыбается...
Соотношение парней и девушек в нашем классе 3 к 1. Она стоит во втором ряду и третья снизу. Я стою в середине третьего ряда. Я вижу ее с одной стороны лица. Эта позиция довольно хороша.Он взглянул на нее, и каждый раз, когда он смотрел на нее, его сердце бешено билось. В тот день, когда я собирался взглянуть на нее, она случайно перевела взгляд на меня. Это был первый раз, когда мы посмотрели друг на друга. Я не знаю, как описать это чувство. Это было потрясающе, но я не мог говорить... Чтобы описать, я инстинктивно быстро опустил голову, она должна была заметить, что я смотрю на нее...
Я добавил ее QQ той ночью. Я не мог дождаться. Хотя я знал, что недостоин ее, каждый имел право любить. В то время я был глубоко пойман в ловушку...
Я всегда отвечаю на сообщения за считанные секунды, ее ответы каждый раз очень короткие, часто ждут полдня, чтобы ответить или вообще не отвечают. Что она делает, почему не отвечает мне, встревоженная и расстроенная. Братья, приходилось ли вам когда-нибудь так ждать? Пока она мне не ответит, хотя бы на пару слов, мое настроение облегчится, но я все равно буду спрашивать ее, что ты делаешь, почему так долго не отвечала мне. Военная подготовка шла день за днём, и ей делалось всё больше и больше признаний. Каждый раз, когда я слышал, что кто-то ей признавался, я до смерти нервничал. Я испытал облегчение, когда услышал, что она не согласна. дней длилось до конца сентября.Каждый день был для меня мучением,я наконец не выдержал,решил признаться ей...
Не подписывайтесь на меня, чтобы общаться так:
Ты проснулся? Завтракали?
Завтракать так поздно вредно для желудка, поэтому ешьте его раньше.
Что ты ел на обед? Что ты сейчас делаешь?
Почему ты не ложишься спать в 11 часов? Поздно ложиться спать вредно для здоровья.
Тогда ты отдыхаешь рано, спокойной ночи.
Установите WeakSet Map Использование WeakMap и рукописный набор, карта. После прочтения
Установить использование
На данный момент полученный набор не является数组, пригодный для использованияset=[...set]а такжеset=Array.from([set])превратить его в массив
добавить: добавить. очистить: очистить все. удалить: удалить определенный. has: определить, существует ли он. размер: длина
Примечание: и ключи, и значения равны [1,'1']. forEach: метод обхода
В чем разница между Set WeakSet?
Давайте посмотрим, что находится в слабой ссылке WeakSet.
У него есть только метод add delete has, который совпадает с set.
На следующем рисунке показана разница между слабой ссылкой WeakSet и набором, аналогично поверхностному и глубокому копированию.
Почему у него нет атрибута размера?
В JavaScript есть механизм автоматической сборки мусора, так каков же принцип этого механизма автоматической сборки мусора? На самом деле это очень просто, то есть найти те значения, которые уже не используются, а затем освободить занимаемую ими память. Сборщик мусора будет выполнять операцию освобождения каждый фиксированный период времени.
key1=nullПосле этого set1 тоже будет собираться как слабая ссылка, но конкретное время сбора неизвестно, поэтому у него нет размера
Карта и WeakMap
Обычные имена ключей объектов могут быть только строками.
Внутренняя часть obj будет передавать объект b через
Object.prototype.toString.call(b)для преобразования
Метод карты и его отличие от обычных объектов
Ключ Карты может быть любого типа, но объект может быть только строкой.
На следующем рисунке показан метод и переработка Map. get: получить значение set: установить значение
WeakMap Weak References: Способ, при котором текущие утечки памяти не представляют опасности. Сделайте код более элегантным
Давайте сначала рассмотрим метод WeakMap, но я расскажу больше и буду использовать его, а также сосредоточусь непосредственно на ключевых моментах.
Чтобы предотвратить утечку памяти, связанные события будут удалены.Если преследование лучше, весь дом и связанные с ним свойства будут убиты.
Используйте слабое значение
Таким образом, вам не нужно очищать счетчик.Когда слишком много атрибутов, связанных с btn, вам не нужно вручную очищать все связанные атрибуты.
Реализуйте простой набор
На самом деле это проблема. Ключ объекта представляет собой строку, поэтому на приведенном выше рисунке невозможно различить 1 и «1».
На следующем рисунке я использую Map для преобразования обновленной версии Set
//Здесь 2 деталиNaN===NaNложно, поэтому используйте es6Object.isОбработка, есть еще обработка +0 и -0, можете сами изучить, хаха
class Set1{
constructor(arr=[]){
this.size=0
this.obj=new Map()
if(arr.length){
arr.forEach(item=>this.add(item))
}
}
add(val){
if(this.has(val)) return false
this.obj.set(val,val)
this.size++
return true
}
has(val){
//这里有2个细节 NaN===NaN 是false的 所以要用es6 的Object.is处理,这里还有+0 和-0的处理,你们自己可以研究下,哈哈
let flag=false
for (let [key,item] of this.obj.entries()) {
if(isNaN(val)){
if(Object.is(val,item)){
flag=true
}
}else{
if(val===item){
flag=true
}
}
}
return flag
}
delete (val){
if(this.has(val)){
this.obj.delete(val)
this.size--
return true
}
return false
}
clear (val){
this.size=0
this.obj={}
}
keys (){
return this.obj.values()
}
values (){
return this.obj.values()
}
forEach (fn,that=this){
for (let [key,item] of this.obj.entries()) {
fn.call(that, item, item, this.this.obj);
}
}
}
Реализуйте простую карту
class Map1{
constructor(){
this.size=0
this.obj={}
}
set(key, val){
this.obj[key]=val
this.size++;
}
get(key){
return this.obj[key]
}
has(key){
return this.obj.hasOwnProperty(key);
}
delete (key){
if (this.has(key)) {
delete this.obj[key];
this.size--;
return true;
}
return false;
}
clear (){
this.size=0
this.obj={}
}
forEach (fn,that=this){
for (let i = 0; i < this.size; i++) {
let key = Object.keys(this.obj)[i];
let value = this.obj[key];
fn.call(that, value, key, this.obj);
}
}
values (){
return Object.values(this.obj);
}
keys (){
return Object.keys(this.obj);
}
}
Карту я не менял, ведь структура Сета и Карты особенная, и идея реализации должна быть схожей.
Суммировать
WeakSet WeakMap — все слабые ссылки
Слабые ссылки: способ, которым текущие утечки памяти не представляют опасности
Код является лишь упрощенной версией, и есть много мест, которые необходимо оптимизировать.Например, параметр Map может быть двумерным массивом.Я не могу смоделировать его реальную структуру Map.
Вы выслушали мою историю и изучили технику, пожалуйста, поддержите меня и поддержите. Спасибо