Спасибо, действительно. Собственно, с этого я и начал и даже сделал, но обнаружил невозможность сделать с новой ветки PR, что меня и запутало. После закрытия PR с ветки форка всё заработало. Обновите ответ (если тут такое возможно, не помню) или добавьте новый что бы отметить его решением :-)
andreloster: ну как причём? :) Значит так сформулировали. "... параллельно с Javascript и PHP. Есть такой вопрос: стоит ли вообще изучить фундамент этих языков ...".
Ну а стандарты W3C / WHATWG - наше всё, их знать нужно обязательно, хотя спецификацию зубрить не обязательно. Но куда важнее знать, что и где работает НЕ по спецификации и как это обойти :)
GeraldIstar: в третий раз повторю - ссылка на объект остаётся внутри замыкания, в Map-объекте-хранилище, GC не может определить, будет ли использоваться это свойство дальше. А с WeakMap может, в этом и отличие.
GeraldIstar: так в том и дело, что ссылки останутся внутри хранилища и не будет удалено ничего. А с WeakMap - да, в некоторых текущих реализациях есть проблемы со сборкой мусора и память освобождается не сразу.
GeraldIstar: создали мы, допустим, миллион объектов Person. Потом удалили (не оставили ссылок снаружи). Если в качестве хранилища таких приватных данных используется Map - в нём останутся ссылки на все эти инстансы, если использовать Object с ключами-id этих инстансов, останется, как минимум, объект с миллионом ключей и "приватные" данные. А с WeakMap, после отработки GC, всё должно быть удалено. Ну и, ко всему прочему, это способ добавления свойства объекта, сам объект при этом не изменяя - например, если он frozen.
Айсик Бендер: да, вы правы, невнимательно прочитал ваш вопрос. Интересно, не встречался раньше с подобным. Как освобожусь, попробую помучить, может что придумаю.
Сергей Протько: со словарями погорячился слегка, если смутило - фишка одного моего велосипеда с использованием Map-подобного конструктора, ожидающего итератор entries.
Сергей Протько: скорее тогда es5-way, в es3 данной семейки методов нет, в es6/7 основная ставка сделана на протокол итераторов + array / generator comprehensions. А так - да, универсальней, но уж лучше какой forEach и отдельной строкой присвоение старому массива пустому - лишняя путаница. Ну а про angular и сам хотел написать, но посчитал лишним.
Сергей Протько: я бы не сказал, что это js-way, скорее просто функциональщина. reduce - замечательно, но в данном случае он (как и любой другой метод из его семейки) не особо здесь и нужен, а страдают и краткость, и производительность. А while и до строки сократить можно. while(arr.length)arr.pop().method();
Хотя вариант while без pop, в теории, чуть быстрее.