関数のパラメーターを変更できるかどうか疑問に思っていますか?
2 に答える
オブジェクトと配列は参照によって渡され、関数に渡す引数への変更は元に影響します。他のすべてのタイプは、値渡しのように動作し、オリジナルを変更することはできません。
Javascript はこれを自動的に行います。他の言語のように値渡しや参照渡しを指定することはできません。参照渡しが必要な場合は、それを配列またはオブジェクトに入れて、配列/オブジェクトを渡します。
例 1 (オブジェクトを渡す):
function myFunc(myObject) {
// this changes the original object
myObject.ready = true;
}
var obj = {ready: false;};
myFunc(obj);
// obj.ready == true - value is changed
例 2 (文字列を渡す):
function hello(str) {
str = str + " and goodbye";
alert(str);
}
var greeting = "Hello";
hello(greeting);
// greeting == "Hello" - value is unchanged
例 3 (オブジェクトに文字列を渡す):
function hello(obj) {
obj.str = obj.str + " and goodbye";
alert(obj.str);
}
var o = {greeting: "Hello"};
hello(o);
// o.greeting == "Hello and goodbye" - value is changed
例 4 (数値を渡す):
function hello(num) {
num++;
alert(num);
}
var mynum = 5;
hello(mynum);
// mynum == 5 - value is unchanged
注: 混乱を招くことがありますが、文字列は実際には (コピーを作成せずに) 参照によって渡されますが、JavaScript の文字列は不変です (JavaScript で文字列をその場で変更することはできません)。そのため、文字列を変更しようとすると、引数として渡されると、変更された値が新しい文字列になるため、元の文字列は変更されません。
「渡されたパラメーターの値を参照されたパラメーターに変更することは可能ですか?」と尋ねるつもりだと思います。
Javascript は、本質的に、オブジェクトの参照渡し言語です。数値、ブール値、文字列などのプリミティブは、値によって渡されます。PhP (またはその他のいくつか) が参照渡しまたは値修飾子 (IE 関数 passByRef( &refVar ) ) をどのように変更できるかについて考えている場合、これはJavaScriptでは不可能です。ここには、特定のオブジェクトを渡すときに JavaScript が少し無関心になることがある方法と、それが役立つ場合に実際に何が起こるかについての良い投稿があります。