ホームページ >ウェブフロントエンド >jsチュートリアル >JSパラメータの受け渡しと変数のコピー

JSパラメータの受け渡しと変数のコピー

一个新手
一个新手オリジナル
2017-10-26 10:05:061833ブラウズ

ECMAScript 変数には、プリミティブ型の値と参照型の値という 2 つの異なるデータ型の値が含まれる場合があります。 プリミティブ型の値は単純なデータ セグメントを指しますが、参照型の値は複数の値で構成されるオブジェクトを指します。

基本的なデータ型は 5 つあります: 未定義、Null、ブール、数値、文字列。これら 5 つの基本データ型は、変数に格納されている実際の値を操作できるため、値によってアクセスされます。 ES6 にはもう 1 つのシンボル タイプがあります。

参照型の値はメモリ上に格納されたオブジェクトであり、JavaScript ではメモリ上の位置に直接アクセスすることはできません。つまり、オブジェクトのメモリ空間を直接操作することはできません。オブジェクトを操作するときは、実際には実際のオブジェクトではなく、オブジェクトへの参照を操作していることになります。この目的のために、参照型の値は参照によってアクセスされます。

変数値のコピー

  • 【変数値のコピー】基本型変数の値をコピーすると、変数オブジェクト上に新しい値が作成され、その値が新しい変数に割り当てられた場所にコピーされます。変数値に対する演算は相互に影響しません。

  • 【参照ポインタのコピー】参照型変数の値をコピーすると、変数オブジェクトに格納されている値も新しい変数によって割り当てられた空間にコピーされます。違いは、この値のコピーが実際にはポインタであることです。そして、このポインターはヒープに格納されているオブジェクトを指します。コピー後、両方の変数は実際には同じオブジェクトを参照します。したがって、変数を変更すると、別の変数に影響します。

パラメータの受け渡し

ECMAScript のすべての関数のパラメータは値渡しされます。変数にアクセスするには、値によるアクセスと参照によるアクセスの 2 つの方法がありますが、パラメーターは値によってのみ渡すことができます。

  • 基本型パラメータの受け渡し: 関数に渡されるのは値のコピーであり、関数内での変更は外部からは見えません。

var a = 1;
var b = 2;
function change(a, b) {
    var c = a;
    a = b;
    b = c;
    console.log(a);    //2
    console.log(b);    //1
}
change(a, b);
console.log(a);    //1
console.log(b);    //2
  • 参照型パラメータの受け渡し: 関数に渡されるのは値への参照です。関数内のプロパティの変更は外部から参照できますが、新しい参照による上書きは外部から参照できません。

    var a = [1, 2, 3];
    var b = [5, 6];
    function change(a,b) {
      a[0] = 4;    //对其属性的修改外部可见 
      var c = a;
      a = b;      //用新引用覆盖
      b = c;
      console.log(a);  //"5,6"        
      console.log(b);  //"4,2,3"
    }
    change(a,b);
    console.log(a);    //"4,2,3"
    console.log(b);    //"5,6"
  • a、bはchange関数内の変数ですが、関数を呼び出すとこの2つの変数にaとbの参照が代入されますが、グローバルの世界ではaとbを変更することはできません。関数は参照を取得するだけで参照を変更する権限がないため、新しい参照による上書きは外部からは見えないからです。
var a = [1, 2, 3];
var b = [5, 6];
function change() {
  var c = a;
  a[0] = 4;    //对其属性的修改外部可见 
  a = b;      //用新引用覆盖
  b = c;
}
change(a,b);
console.log(a);  //"5,6" 
console.log(b);  //"4,2,3"

js はブロックレベルのスコープを持っていないので、change 内で変数 a を見つけることができず、b は意識的に上の層に行って見つけることになるので、ここでの a と b はグローバル変数への参照になります。

☞☞☞JavaScriptの深層学習シリーズ☜☜☜

ECMAScript変数には、プリミティブ型の値と参照型の値という2つの異なるデータ型の値が含まれる場合があります。 プリミティブ型の値は単純なデータ セグメントを指しますが、参照型の値は複数の値で構成されるオブジェクトを指します。

基本的なデータ型は 5 つあります: 未定義、Null、ブール、数値、文字列。これら 5 つの基本データ型は、変数に格納されている実際の値を操作できるため、値によってアクセスされます。 ES6 にはもう 1 つのシンボル タイプがあります。

参照型の値はメモリ上に格納されたオブジェクトであり、JavaScript ではメモリ上の位置に直接アクセスすることはできません。つまり、オブジェクトのメモリ空間を直接操作することはできません。オブジェクトを操作するときは、実際には実際のオブジェクトではなく、オブジェクトへの参照を操作していることになります。この目的のために、参照型の値は参照によってアクセスされます。

変数値のコピー

    【変数値のコピー】基本型変数の値をコピーすると、変数オブジェクト上に新しい値が作成され、その値が新しい変数に割り当てられた場所にコピーされます。変数値に対する演算は相互に影響しません。
  • 【参照ポインタのコピー】参照型変数の値をコピーすると、変数オブジェクトに格納されている値も新しい変数によって割り当てられた空間にコピーされます。違いは、この値のコピーが実際にはポインタであることです。そして、このポインターはヒープに格納されているオブジェクトを指します。コピー後、両方の変数は実際には同じオブジェクトを参照します。したがって、変数を変更すると、別の変数に影響します。
  • パラメータの受け渡し

ECMAScript の関数パラメータはすべて値渡しです。変数にアクセスするには、値によるアクセスと参照によるアクセスの 2 つの方法がありますが、パラメーターは値によってのみ渡すことができます。

基本的な型パラメータの受け渡し: 関数に渡されるのは値のコピーであり、関数内でのその変更は外部からは見えません。


var a = 1;
var b = 2;
function change(a, b) {
    var c = a;
    a = b;
    b = c;
    console.log(a);    //2
    console.log(b);    //1
}
change(a, b);
console.log(a);    //1
console.log(b);    //2

    参照型パラメータの受け渡し: 関数に渡されるのは値への参照です。関数内のプロパティの変更は外部から参照できますが、新しい参照による上書きは外部から参照できません。
    var a = [1, 2, 3];
    var b = [5, 6];
    function change(a,b) {
      a[0] = 4;    //对其属性的修改外部可见 
      var c = a;
      a = b;      //用新引用覆盖
      b = c;
      console.log(a);  //"5,6"        
      console.log(b);  //"4,2,3"
    }
    change(a,b);
    console.log(a);    //"4,2,3"
    console.log(b);    //"5,6"
  • a, b 変更関数内の変数ですが、関数を呼び出すとこの2つの変数にaとbの参照が代入されますが、グローバルの世界ではaとbを変更することはできません。関数は参照を取得するだけで参照を変更する権限がないため、新しい参照による上書きは外部からは見えないからです。

    var a = [1, 2, 3];
    var b = [5, 6];
    function change() {
      var c = a;
      a[0] = 4;    //对其属性的修改外部可见 
      a = b;      //用新引用覆盖
      b = c;
    }
    change(a,b);
    console.log(a);  //"5,6" 
    console.log(b);  //"4,2,3"

    js はブロックレベルのスコープを持っていないので、change 内で変数 a を見つけることができず、b は意識的に上の層に行って見つけることになるので、ここでの a と b はグローバル変数への参照になります。

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

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