использование памяти узла js при объявлении и передаче var в функции

#javascript #node.js #memory-management

Вопрос:

 async function getDataFromExternalAPI(bodyPayload) {
  // send request and get data.
}


var bodyPayload = {a: 1, b: {}};

await getDataFromExternalAPI(bodyPayload);
 

против

 await getDataFromExternalAPI({a: 1, b: {}});
 

Каковы последствия использования первого метода для памяти?
Первый метод чище с точки зрения ремонтопригодности и ремонтопригодности, но имеет ли он недостатки ?

Комментарии:

1. Вы не сможете использовать переменную, используемую foo в области первого кода. Это может привести к путанице, если вы снова используете то же foo самое, и функция не является чистой. Изменение значения объекта внутри функции также отразится и снаружи

2. Ни одна из ваших test() функций здесь не имеет смысла. Вы используете await , как если бы вы вызывали функцию с именем test() и передавали ей аргумент, но затем вы пытаетесь определить тело функции, как если бы это должно было быть объявлением функции. Здесь что-то неясно и, вероятно, синтаксически неправильно. Пожалуйста, уточните свой вопрос с помощью соответствующих примеров кода.

3. @TusharShahi что, если я сделаю это const ? В основном меня больше волнует аспект памяти. PS — обновите пример с помощью более редактируемого кода.

Ответ №1:

Каковы последствия использования первого метода для памяти?

Ничего стоящего, чтобы использовать это, чтобы решить, как это написать (подробнее см. Ниже)

Первый метод более чистый с точки зрения удобочитаемости и ремонтопригодности, но имеет ли он недостатки ?

Никаких недостатков. Выберите тот вариант, который делает код наиболее чистым для чтения и обслуживания.

Что, если я сделаю это const?

Создание этого const на самом деле не изменит использование его памяти здесь. const всегда предпочтительнее, когда вам не нужно снова присваивать символ, потому что это иногда полезная подсказка для интерпретатора и оптимизатора, но это не меняет использование памяти в данном примере.

К вашему сведению, var это почти никогда больше не было предпочтительным выбором. Используйте let или const .


Объекты передаются в качестве аргумента в качестве указателей. Никакая копия объекта не создается, когда он передается в качестве аргумента.

Оба ваших примера кода просто создают объект, а затем передают его в качестве аргумента. Первый-это присвоение ему именованного символа, чтобы другой код в этой области верхнего уровня в вашем примере мог получить к нему доступ, и его срок службы может быть больше, поскольку другой код в этой области может получить к нему доступ до того, как он будет собран.

Второй пример также просто создает объект и затем передает его в качестве аргумента, но, поскольку в этой области он не является именованным символом, единственный объект, который можно использовать, находится внутри функции (если только он каким-либо образом не возвращен из функции или не передан в другие области действия из функции).

То, что использовать, на самом деле просто вопрос предпочтительного стиля программирования и что делает любое данное обстоятельство более читабельным и доступным для обслуживания. В общем, я бы предпочел второй вариант, если объект используется только в качестве аргумента, и если построение объекта не требует много отдельных шагов, и если никакой другой код не использует тот же объект, и если определение простое.

Теперь, если бы создание этого объекта было сложной задачей или для применения значимого имени к объекту-аргументу была бы реальная ценность для ясности кода, я бы оптимизировал код для того, насколько четко я мог бы написать это сложное задание, и это, вероятно, включало бы определение символа в верхней области, а затем настройку свойств для этого объекта. Итак, я оптимизируюсь для того, что делает код наиболее понятным для чтения, потому что между ними нет значимых последствий для памяти.