2013-06-23 75 views
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/

+1

我建議你閱讀一些有關函數的參數,全局變量和範圍(特別是在javascript中) – steo

回答

0

這不起作用,因爲自編號由而不是通過了參考,您正在修改這些變量的本地副本,但外部範圍中的變量保持不變。

如果從函數中刪除a和b參數,則會得到所需的行爲,因爲正在修改的a和b參數將是外部範圍中的參數。

什麼是參考?

這裏有一個相當不錯的答案 - Javascript by reference vs. by value

總之,只有對象和數組按引用傳遞。雖然實際上它比這更復雜,這取決於如何定義函數和語法,此時可以假定通過調用new定義的任何內容或者句法簡寫[](數組)和{}(對象)通過引用傳遞。數字和字符串等其他類型按值傳遞。

+0

如何使用參考? –

+0

你不能。 JavaScript中的所有內容都是按值傳遞的。 – georg

+0

@ thg435不,他們不是。對象和數組通過引用傳遞。看到我更新的答案。 – dherman

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

0

另一種解決方案:由於JavaScript中的變量作用域的工作原理,只需刪除「test」函數的參數即可。

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

var a = 1; 
var b = 2; 

test(); 

console.log(a); 
console.log(b); 
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; 
} 
+0

關於兩個不同的a和b的好處。 – georg