当JavaScript传递给函数时,它是否有办法跟踪变量的标识? 例如:
var dog = 0;
function dogStuff(animal){
animal = animal++;
}
在这个例子中,我想通过将dog传递给函数来使狗== 1:
dogStuff(dog);
这样
console.log(dog);
会打印1.人们已经将此标记为与其他几个问题重复,但对于我来说,这对初学者来说有点太复杂了。我需要一些回答,假设我几乎不了解JS。
答案 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);