0
function test(a, b){
   a = a + 2;
   b = b + 5;
}

var a = 1;
var b = 2;

test(a, b);

console.log(a);
console.log(b);

这返回 1 和 2,但我想要 3 和 7。

是否可以在一个功能中进行两个操作?如果我使用返回,这工作,但如何使用返回两个操作?

直播:http: //jsfiddle.net/anCq6/

4

5 回答 5

2

你得到 1 和 2 而不是 3 和 7 的原因是因为有两个不同的 a 和 b 变量。有你在函数外部声明的 a 和 b ,还有 a 和 b 代表你传递给函数的值。(基本上,函数括号中声明的参数是新声明的变量。)

如果要更改外部 a 和 b,请将测试函数更改为以下内容:

function test(x, y) {
   a = x + 2;
   b = y + 5;
}

或者,或者,不要将引用传递给函数,以便内部作用域中的 a 和 b 引用与外部作用域相同的 a 和 b:

function test() {
   a = a + 2;
   b = b + 5;
}
于 2013-06-23T19:18:43.157 回答
1

只需将其作为对象发送回来...

function test(a, b){
 a = a + 2;
 b = b + 5;
 return {a:a,b:b};
}

var a = 1;
var b = 2;

var test = test(a, b);

alert(test.a);
alert(test.b);

在这里演示

于 2013-06-23T19:15:42.253 回答
0

这不起作用,因为由于数字是通过而不是通过引用传递的,因此您正在修改这些变量的本地副本,但是外部范围内的那些保持不变。

如果从函数中删除 a 和 b 参数,您将获得所需的行为,因为正在修改的 a 和 b 参数将是外部范围内的参数。

什么是参考?

这是一个相当不错的答案 - Javascript by reference vs. by value

简而言之,只有对象和数组是通过引用传递的。尽管实际上它比这更复杂,具体取决于函数的定义方式和语法,但此时您可以假设通过调用new或语法简写[](array) 和{}(object) 定义的任何内容都是通过引用传递的。其他类型如数字和字符串是按值传递的。

于 2013-06-23T19:16:43.523 回答
0

另一种解决方案:由于 JavaScript 中变量作用域的工作方式,您只需删除“test”函数的参数即可。

function test(){
   a = a + 2;
   b = b + 5;
}
于 2013-06-23T19:17:35.390 回答
0
function test(){
   a = a + 2;
   b = b + 5;
}

var a = 1;
var b = 2;

test();

console.log(a);
console.log(b);
于 2013-06-23T19:18:05.037 回答