5
爲什麼這兩個腳本不一樣?我想要的是第一個腳本,但在第二個drawData()中它改變了數據,這很奇怪。誰能告訴我爲什麼,以及如何解決它。謝謝!在JavaScript函數中更改數組更改函數外的數組?
var data = ["right"] ;
function drawData(arrs,type){
if(type=="percentage"){
arrs[0]="omg";
}
alert(data[0]);
}
drawData(data);
drawData(data,"percentage");
第二:
var data = "right" ;
function drawData(arrs,type){
if(type=="percentage"){
arrs="omg";
}
alert(data);
}
drawData(data);
drawData(data,"percentage");
這是因爲一個物體本身。當一個對象被修改時*該對象被修改。當一個值(對象)被傳遞給一個函數時,它不會被複制,克隆或複製**(內部有不同的使用技巧,但這在語義上是正確的)。也就是說,只有一個數組 - 並且在同一個數組內改變。如果您希望能夠在不擔心影響外部的情況下進行更改,請先複製一份。對於一個簡單的數組,這可以通過'Array.prototype.slice'完成。否則,像jQuery這樣的庫有方便的複製方法。 – 2012-06-12 04:45:43
哦,並回答**之前,你說**「通過參考」,請閱讀[評估策略](http://en.wikipedia.org/wiki/Evaluation_strategy)和搜索術語「參考」在[ECMAScript規範](http://es5.github.com/),並能夠備份您的單詞選擇。謝謝! – 2012-06-12 04:49:10
謝謝,我在[http://stackoverflow.com/](http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone- a-javascript-object),看看John Resig的答案。 –