如何将变量传递给函数时如何跟踪它?

时间:2018-04-25 22:38:59

标签: javascript variables

当JavaScript传递给函数时,它是否有办法跟踪变量的标识? 例如:

var dog = 0;

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

在这个例子中,我想通过将dog传递给函数来使狗== 1:

dogStuff(dog);

这样

console.log(dog);

会打印1.人们已经将此标记为与其他几个问题重复,但对于我来说,这对初学者来说有点太复杂了。我需要一些回答,假设我几乎不了解JS。

2 个答案:

答案 0 :(得分:1)

首先要做的事情是:animal = animal++行不会做任何事情,因为它是一个后缀增量。只需执行animal++++animal即可增加它。

不,dog不会改变。 JavaScript passes primitives by value(感谢@ASDFGerte进行更正)。

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

你想做什么(可能)与@alfasin提到的类似:返回狗的更新值。

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

但是,如果传递对象并重新分配其属性,则将修改原始对象(almost like pass by reference):

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

编辑:如果要在返回时分配多个变量,一种可能的方法是返回一个变量数组,然后可以使用deconstructed assignment分配:

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

答案 1 :(得分:1)

您发布的功能未返回任何可在其外部使用的值。所以你需要添加:return。这意味着当你运行dogStuff(...)时,它实际上会返回一个值。然后将该值保存在变量中,该变量可以与作为参数传递的狗相同。

这是完整的代码:

var dog = 0;

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

dog = dogStuff(dog);