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兩種操作功能於一體
可以使一個函數的兩個操作?這工作如果我使用返回,但如何使用返回到兩個操作?
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兩種操作功能於一體
可以使一個函數的兩個操作?這工作如果我使用返回,但如何使用返回到兩個操作?
這不起作用,因爲自編號由值而不是通過了參考,您正在修改這些變量的本地副本,但外部範圍中的變量保持不變。
如果從函數中刪除a和b參數,則會得到所需的行爲,因爲正在修改的a和b參數將是外部範圍中的參數。
什麼是參考?
這裏有一個相當不錯的答案 - Javascript by reference vs. by value
總之,只有對象和數組按引用傳遞。雖然實際上它比這更復雜,這取決於如何定義函數和語法,此時可以假定通過調用new
定義的任何內容或者句法簡寫[]
(數組)和{}
(對象)通過引用傳遞。數字和字符串等其他類型按值傳遞。
只需發送回作爲一個對象...
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);
另一種解決方案:由於JavaScript中的變量作用域的工作原理,只需刪除「test」函數的參數即可。
function test(){
a = a + 2;
b = b + 5;
}
function test(){
a = a + 2;
b = b + 5;
}
var a = 1;
var b = 2;
test();
console.log(a);
console.log(b);
你得到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;
}
關於兩個不同的a和b的好處。 – georg
我建議你閱讀一些有關函數的參數,全局變量和範圍(特別是在javascript中) – steo