Ну, на самом деле вы выделяете дополнительный объект во втором случае, иначе они выглядят одинаково для меня.
Функции являются объектами первого класса в JS, и легко забыть, что в любое время вы видите function(){}
, что выделяет новый объект функции, который является относительно жирным. Вы могли бы подумать об этом, увидев, что new Function()
называется , если это делает выделение объектов более очевидным для вас.
Это вредно только тогда, когда у вас есть «конструктор», который определяет функции внутри него и возвращает объект, указывающий на эти функции. Каждая из этих функций представляет собой отдельный объект, созданный поверх объекта, который вы создаете из конструктора. Функции будут легко получать на 10-100 раз больше памяти, чем объект и его данные, в зависимости от данных и количества методов, конечно.
Если вы пишете приложение, легко подумать о том, будете ли вы когда-либо беспокоиться об этом. Если вы знаете , ваше приложение никогда не создаст много объектов, а потеря памяти не так уж плоха в увеличенной картине. Если вы являетесь , пишите библиотеку общего назначения и т. Д., Пожалуйста, не делайте эти предположения для разработчиков приложений, чьи потребности вы не можете предсказать .
Значит, 'x',' f' и 'obj' будут в некоторой локальной области? Пожалуйста, заявите об этом. Если нет, этот вопрос будет касаться только пространства имен. Кроме того, как вы получаете доступ к 'x' во втором варианте? – Bergi
Микро-оптимизации практически не стоит беспокоиться. Если ** ** ** или разница между двумя методами - это микро-управление памятью, тогда вы должны просто использовать какой-либо метод, который вы предпочитаете. Для меня обычно есть четко определенные причины использовать закрытие vs.размещение свойств объекта. Память никогда не является фактором для меня в определении того, какой подход использовать, поскольку вы на самом деле не управляете памятью в javascript, как вы можете на других языках. –
Эта статья может представлять интерес: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management –