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,但如何使用返回两个操作?
答案 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);
答案 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);