两个操作在一个功能

时间:2013-06-23 19:09:59

标签: javascript jquery

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。

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

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

5 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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);

DEMO HERE

答案 2 :(得分:0)

这不起作用,因为数字是通过而不是引用传递的,所以你要修改这些变量的本地副本,不过那些变量​​是外部范围保持不变。

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

什么是参考资料?

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

简而言之,只有对象和数组通过引用传递。虽然实际上它比这更复杂,取决于函数的定义和语法,此时你可以假设通过调用new或语法缩写[](数组)和{{1 (object)通过引用传递。其他类型如数字和字符串按值传递。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

var a = 1;
var b = 2;

test();

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