Я думаю, что очевидный ответ здесь заключается в том, что jQuery создал свой uuid для внутреннего использования и не видел веских причин или большого требования, чтобы сделать его общедоступным. Это не означает, что причин не существует, просто они не казались достаточно важными для того, чтобы он оказался на вершине списка вещей, над которыми нужно работать.
Монотомически увеличивающиеся счетчики для использования в качестве уникальных идентификаторов довольно тривиальны для реализации, и я использовал один много раз. Я не чувствовал, что мне нужна поддержка библиотеки классов для этого.
Я думаю, что ваш страх утечки памяти, потому что вы храните ссылки на объекты, немного преувеличен. Во-первых, это только утечка памяти, если вы избавляетесь от объекта и забываете избавиться от какой-либо ссылки на него. Это просто общее правило в языках сборки мусора, которые вы должны «знать», где вы храните ссылки на объекты, от которых вы можете избавиться, и очищать эти ссылки, когда вы собираетесь освободить объект.
Во-вторых, это значительная утечка памяти, если вы делаете одно и то же много раз на странице или если объект очень, очень большой. Все они очищаются, когда вы переходите на следующую страницу, поэтому не похоже, что это что-то накапливается вечно, если вы никогда не покинете эту страницу браузера и не делаете одно и то же снова и снова, что включает в себя удаленные объекты, но ссылки, которые не удалены.
В-третьих, механизм jQuery .data () пытается решить эту проблему за вас при использовании объектов DOM.
В-четвертых, в вашем надуманном примере это не приведет к утечке памяти, если вы не очистите массив значков в состоянии 2, когда он больше не действует или больше не используется. Если вы очистите его, то нет проблем с сохранением прямой ссылки DOM в этом массиве. Если вы не очистите массив, то даже сам массив является утечкой памяти, даже если он содержит абстрактные uuids вместо ссылок DOM. Использование абстрактных ссылок - это гораздо больше работы, чем нужно в большинстве случаев.
Опять же, даже если у вас есть утечка, утечки важны только в том случае, если страница имеет длительный срок службы, и вы неоднократно создаете и выпускаете объекты, но не очищаете все ссылки на них таким образом, чтобы ссылки накапливались с течением времени. и делать это достаточно, чтобы утечка памяти, которую они вызывают, имела смысл. Я постоянно храню ссылки на объекты DOM в переменных JS. Я просто стараюсь сделать так, чтобы я обнулял их, когда они мне больше не нужны, поэтому я знаю, что объект DOM может быть освобожден в будущем.