なぜ2つのスクリプトが異なるのですか?私が望むのは第1のスクリプトですが、第2のdrawData()ではデータが変わります。変です。誰が私にそれがなぜ、どのようにそれを修正するかを教えてもらえますか?ありがとうございました!JavaScript関数の配列を変更すると、配列が関数の外に変更されますか?
var data = ["right"] ;
function drawData(arrs,type){
if(type=="percentage"){
arrs[0]="omg";
}
alert(data[0]);
}
drawData(data);
drawData(data,"percentage");
2: - ので、この変化は関数の外に見られる
var data = "right" ;
function drawData(arrs,type){
if(type=="percentage"){
arrs="omg";
}
alert(data);
}
drawData(data);
drawData(data,"percentage");
オブジェクト自体であるためです。オブジェクトが変更されたとき*オブジェクトが変更されたとき。値(オブジェクト)が関数に渡されると**コピー、クローン化、または複製**されません(内部的には、使用されるさまざまなテクニックがありますが、意味的には正しい)。つまり、配列は1つしかなく、関数内で* same *配列が変更されます。外部に影響を及ぼす恐れなしに変更できるようにしたい場合は、まずコピーを作成してください。単純な配列の場合、これは 'Array.prototype.slice'で行うことができます。それ以外の場合、jQueryのようなライブラリには便利なコピーメソッドがあります。 –
ああ、回答してください** ** "合格基準"と言う前に、[評価戦略](http://en.wikipedia.org/wiki/Evaluation_strategy)を読んで、 [ECMAScriptの仕様書](http://es5.github.com/)を使用して、あなたの言葉の選択肢をバックアップすることができます。ありがとう! –
ありがとう、私は何か興味深いが見つかりました[http://stackoverflow.com/](http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone- a-javascript-object)John Resigの答えを見てください。 –