0
爲什麼這不警告a,b,c?爲什麼concat方法似乎毀了我的數組引用
var results=[];
function test(r){
var abc = ['a','b','c'];
r=r.concat(abc);
}
test(results);
alert(results);
爲什麼這不警告a,b,c?爲什麼concat方法似乎毀了我的數組引用
var results=[];
function test(r){
var abc = ['a','b','c'];
r=r.concat(abc);
}
test(results);
alert(results);
原因是因爲concat不會修改您要調用它的對象。此外,r=r.concat(abc);
表明您不明白按引用傳遞。當你把r賦值給某個東西時,你不會改變原來的東西,傳入的值是指向的東西,你所做的只是更新函數中的變量指向的東西。這將工作:
var results=[];
function test(r){
var abc = ['a','b','c'];
return r.concat(abc);
}
results = test(results);
alert(results);
如果我想在concat數組之後做些什麼?換句話說,我如何在不返回值的情況下更新原件?感謝您現在解釋它的意義。我理解在某種程度上通過參考,但顯然不如我應該。 – qw3n 2011-03-08 04:05:37
如果你真的想,'r.push.push.apply(r,abc)'會原地改變'r'引用的對象。但這有點難看。 – ephemient 2011-03-08 04:10:53
@ qw3n gald我可以幫忙。要做到這一點,你需要使用一個函數來修改傳入的變量。簽出'push()'和'splice()'。 – Melv 2011-03-08 04:11:56