JavaScript устанавливает значение для переменных свойств при вызове функции - PullRequest
0 голосов
/ 08 декабря 2018

Я обнаружил, что есть два способа обновления значения свойства переменной при вызове функции

Пример 1:

function bar( arg ) {
  return arg + 1;
}

var foo = {
  num: 1
};

foo.num = bar( foo.num );
console.log( foo.num );

Пример 2:

function bar( arg ) {
  arg.num = arg.num + 1;
}

var foo = {
  num: 1
};

bar( foo );
console.log( foo.num );

Я хочу знать, каково правильное соглашение об именах для каждого из вызовов метода.

Также любой может объяснить, как можно обновитьисходное значение переменной внутри операции закрытой функции, как показано в примере 2?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Я хочу знать, каково правильное соглашение об именах для каждого из методов.

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

также может кто-нибудь объяснить, как можно обновить исходное значение переменной внутри операции закрытой функции, как показано в примере 2?

Это невозможно.Если вы передаете число, оно передается как значение, и у вас нет возможности узнать, к чему принадлежит это число.Это хорошо, так как вы всегда можете отслеживать, какая функция может изменять объект.bar(foo) есть, bar(foo.num) нет.

0 голосов
/ 08 декабря 2018

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

Если вы передаете объект (то есть не примитивное значение,например, Array или пользовательский объект) в качестве параметра, и функция изменяет свойства объекта, это изменение видно вне функции.Источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions

В javascript objects передаются reference, поэтому, когда вы передаете объект функции, которую вы передаете, он memory reference не copy.Поэтому, когда вы обновляете значение в функции, оно обновляет значение по ссылке.

function bar(arg) {
  arg.num = arg.num + 1;
}

var foo = {
  num: 1
};

bar(foo);
console.log(foo.num);

Когда вы передаете primitive value, оно передается value.Он передает значение copy, поэтому любые изменения, которые вы делаете в функции close, не влияют на исходное значение.

function bar(arg) {
  arg = arg + 1;
}

var foo = 1

bar(foo);
console.log(foo);
...