¿por qué los dos scripts son diferentes? lo que quiero es el primer guión, pero en el segundo drawData() cambia los datos, es extraño. ¿alguien puede decirme por qué es y cómo solucionarlo? ¡gracias!¿Cambiar la matriz en la función de JavaScript cambia la matriz fuera de la función?
var data = ["right"] ;
function drawData(arrs,type){
if(type=="percentage"){
arrs[0]="omg";
}
alert(data[0]);
}
drawData(data);
drawData(data,"percentage");
segundo:
var data = "right" ;
function drawData(arrs,type){
if(type=="percentage"){
arrs="omg";
}
alert(data);
}
drawData(data);
drawData(data,"percentage");
Es porque un objeto es en sí mismo. Cuando un objeto se modifica * ese * objeto se modifica. Cuando se pasa un valor (objeto) a una función ** no se copia, se clona o se duplica ** (internamente hay diferentes técnicas que se usan, pero esto es semánticamente correcto). Es decir, solo hay una matriz, y esa * misma * matriz se cambia dentro de la función. Si desea poder cambiarlo sin temor a afectar el exterior, primero haga una copia. Para una matriz simple, esto se puede hacer con 'Array.prototype.slice'. De lo contrario, las bibliotecas como jQuery tienen métodos de copia útiles. –
Ah, y responda, ** antes de decir ** "pasar por referencia", lea [Estrategias de evaluación] (http://en.wikipedia.org/wiki/Evaluation_strategy) y busque el término "referencia" en el [Especificación ECMAScript] (http://es5.github.com/) y podrá hacer una copia de seguridad de sus opciones de palabras. ¡Gracias! –
gracias, he encontrado algo interesante en [http://stackoverflow.com/](http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone- a-javascript-object) solo mira la respuesta de John Resig. –