ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript関数のパラメータの受け渡し方法を詳しく解説

JavaScript関数のパラメータの受け渡し方法を詳しく解説

黄舟
黄舟オリジナル
2017-03-22 14:54:221503ブラウズ

この記事では、JavaScriptで関数のパラメータを渡す方法を中心に紹介しますが、参考値が高いです。以下のエディターで見てみましょう

JavaScript は、変数オブジェクトを使用して変数の有効期間を追跡します。基本型の値は変数オブジェクトに直接保存されますが、参照型の値はメモリ内の実際のオブジェクトの保存場所を指すポインターとして変数オブジェクトに保存されます。

基本型の値の転送

基本型の値をパラメーターに渡すと、渡された値はローカル変数 (名前付きパラメーター、または引数オブジェクト内の要素) にコピーされます。

function addOne (num) {
 num++;
 return num;
}
var count = 1;
var result = addOne(count);
console.log(count); //1
console.log(result); //2

上記の例では、functionnumのパラメータに変数countの値を渡して関数内で使用していますが、このとき変数countとパラメータnumの値は同様に、これらは 2 つの独立した変数であるため、関数内でパラメーター num の値を変更しても、関数外の変数 count の値には影響しません。

つまり、JavaScript の関数の基本的な型値パラメーターは値によって渡されます。

参照型の値の受け渡し

function setName (obj) {
 obj.name = 'Nicholas';
}
var person = new Object();
setName(person);
console.log(person.name); //'Nicholas'

上記の例では、関数のパラメータobjに変数personの値を渡していますが、このとき関数内のパラメータobjにname属性が追加されています。この関数はパラメータ obj の関数を作成し、外部変数 person は name 属性も取得します。結果からすると、JavaScriptにおける関数の参照型の値パラメータは参照渡しされているようです。

しかし、そうではありません。変数 person の値は参照型の値であるため、変数 object 内のその値はメモリ上の実際のオブジェクトのアドレス (またはポインタ) とみなすことができます。パラメータを渡した後は、パラメータ obj の値もメモリ内のオブジェクトのアドレスになります。したがって、関数内のパラメータ obj の値によって参照されるオブジェクトは、操作変数 person の値によって参照されるオブジェクトと同等になります。

function setName (obj) {
 obj.name = 'Nicholas';
 obj = new Object();
 obj.name = 'Greg';
 return obj;
}
var person = new Object();
var result = setName(person);
console.log(person.name); //'Nicholas'
console.log(result.name); //'Greg'

パラメーターが参照によって渡される場合、上記の例では、関数はパラメーター obj の値によって参照されるオブジェクトを変更すると、対応する変数 person の値によって参照されるオブジェクトも変更されます。関数の記述方法を変更すると、値によるパラメーターの受け渡しを理解するのにさらに役立つ場合があります。

function setName () {
 var obj = arguments[0];
 obj.name = 'Nicholas';
 obj = new Object();
 obj.name = 'Greg';
 return obj;
}

変数 person とパラメータ obj の値はメモリ内の同じオブジェクトのアドレスですが、これらは 2 つの独立した変数です。関数内のパラメータ obj の値を変更してメモリ内の別のオブジェクトを指すようにしても、変数 person の値は変更されず、元のオブジェクトを指し続けます。

つまり、JavaScript の関数の参照型の値パラメーターは値によって渡されます。

結論

以上がJavaScript関数のパラメータの受け渡し方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。