Как отслеживать значение переменной, когда она передается в функцию? - PullRequest
0 голосов
/ 26 апреля 2018

Есть ли в JavaScript способ отслеживать идентичность переменной, когда она передается в функцию?Например:

var dog = 0;

function dogStuff(animal){
  animal = animal++;
}

В этом примере я хотел бы сделать собаку == 1, передавая собаке в функцию:

dogStuff(dog);

так, чтобы

console.log(dog);

напечатал бы 1. Люди отметили это как дубликат к паре других вопросов, но они слишком сложны для меня, новичка, чтобы понять.Мне нужны ответы, которые предполагают, что я почти ничего не знаю о JS.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Функция, которую вы опубликовали, не вернула никакого значения, которое вы можете использовать вне ее.Так что вам нужно добавить: возврат.Это означает, что когда вы запускаете dogStuff (...), он на самом деле возвращает значение.И затем вы сохраняете это значение в переменной, которая может быть той же самой собакой, которую вы передали в качестве параметра.

Вот полный код:

var dog = 0;

function dogStuff(animal){
   return animal++;
}

dog = dogStuff(dog);
0 голосов
/ 26 апреля 2018

Перво-наперво: строка animal = animal++ ничего не будет делать, потому что это постфиксный шаг.Либо просто введите animal++ или ++animal, чтобы увеличить его.


Нет, dog не изменится.JavaScript передает примитивы по значению (спасибо @ASDFGerte за исправление).

var dog = 0;
function dogStuff(animal) {
  animal++;
}
dogStuff(dog);
console.log(dog);  // prints 0

То, что вы хотите сделать (вероятно), похоже на упомянутое @alfasin: вернуть обновленное значениеof dog.

var dog = 0;
function dogStuff(animal) {
  animal++;
  return animal;
}
dog = dogStuff(dog);
console.log(dog);  // prints 1

Однако, если вы передадите объект и переназначите его свойства, исходный объект будет изменен ( почти как передача по ссылке ):

var dog = { age: 0 };
function incrementAge(animal) {
  animal.age++;
}
incrementAge(dog);
console.log(dog.age);  // prints 1

edit : Если вы хотите присвоить несколько переменных при возврате, один из возможных способов сделать это - вернуть массив переменных, которые затем могут быть назначены с помощью деконструированное присваивание :

var dog = 0;
var cat = 52;
function incrementTwoAnimals(animal1, animal2) {
  animal1++;
  animal2++;
  return [animal1, animal2];
}
[dog, cat] = incrementTwoAnimals(dog, cat);  // deconstructed assignment
console.log(dog, cat);  // prints 1, 53
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...