[生活コード]JavaScript不変性-2.ふへんかんすう
11655 ワード
生活コードのJavaScript Immutability講義をまとめたもの.
2.不変関数
2-1. 不変関数の作成
JavaScriptの関数は、パラメータのパラメータが元のデータ型とオブジェクトである場合の動作が異なります.
オブジェクトが関数のパラメータとして渡され、オブジェクト自体(元)のプロパティ値(元のタイプ、string)が変更された場合:
パラメータとして渡すオブジェクトを 関数にコピーする 複製オブジェクトのプロファイル を変更する.
変更されたオブジェクトの を返します.関数を使用して、返されたオブジェクトを新しい変数に割り当てます. 関数に渡されたオブジェクトをコピーし、新しい変数 に割り当てます.新しい変数を関数のパラメータとして に渡す
JavaScriptのAPIで可変ソースを処理するAPIと、可変ソースを処理するAPIを比較することで、「4.可変関数の作成」で見たメカニズムが実際にどのように現実的に実現されているのか、ARABOZA.
元のオブジェクトを変更する場合多くの変数は同じソースオブジェクトを参照し、すべての変更が必要な場合は 同じソースオブジェクトを参照する変数は多く、値は に変更できません.ただし、元のオブジェクトの値を変更して使用する場合は、 と入力します.ソースオブジェクトをコピーすることで、ソースオブジェクトの不変性を維持できます.しかし、性能が損なわれる. 元のオブジェクトを変更すると、パフォーマンスが向上します.しかし、コードは予想外の動作をする可能性があります. 要するに、状況に応じて長所を伸ばし短所を避けなければならない.
2.不変関数
2-1. 不変関数の作成
JavaScriptの関数は、パラメータのパラメータが元のデータ型とオブジェクトである場合の動作が異なります.
オブジェクトが関数のパラメータとして渡され、オブジェクト自体(元)のプロパティ値(元のタイプ、string)が変更された場合:
function fn(person){
person.name = 'lee';
}
var o1 = {name:'kim'};
fn(o1);
console.log(o1); // {name: "lee"}
オブジェクトが関数のパラメータとして渡され、それ自体(元)のプロパティ値(元のタイプ、string)が変わらない場合:パラメータとして渡すオブジェクト
変更されたオブジェクト
function fn(person){
person = Object.assign({}, person); // 함수 내부에서 인자로 전달받은 객체를 복사
person.name = 'lee'; // 복사한 객체의 프로퍼티를 수정
return person; // 수정한 객체를 리턴
}
var o1 = {name:'kim'};
var o2 = fn(o1); // 리턴 받은 객체를 새로운 변수에 할당
console.log(o1, o2); // {name: "kim"} {name: "lee"}
オブジェクトが関数のパラメータとして渡され、それ自体(元のタイプ、string)の値が変わらない場合は、2:function fn(person){
person.name = 'lee';
}
var o1 = {name:'kim'};
var o2 = Object.assign({}, o1); // 원본 객체를 복제하여 새로운 변수에 할당
fn(o2); // 복제된 객체가 담긴 변수를 함수에 전달
console.log(o1, o2); // {name: "kim"} {name: "lee"}
2-2. 可変APIと不変APIの比較JavaScriptのAPIで可変ソースを処理するAPIと、可変ソースを処理するAPIを比較することで、「4.可変関数の作成」で見たメカニズムが実際にどのように現実的に実現されているのか、ARABOZA.
元のオブジェクトを変更する場合
var score = [1,2,3];
score.push(4);
console.log(score); // [1, 2, 3, 4]
ソースオブジェクトをコピーして、ソースの不変性を維持します.var score = [1,2,3];
// score.push(4);
var score2 = score.concat(4);
console.log(score, score2); // [1, 2, 3] [1, 2, 3, 4]
元のオブジェクトを変更する場合は、次のようになります.var score = [1,2,3];
var a = score;
var b = score;
var c = score;
// 수 많은 변수들이 객체(배열) score를 참조 ...
score.push(4);
console.log(score, a, b, c); // [1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4]
元のオブジェクトの不変性を維持するのに役立つ場合:var score = [1,2,3];
var a = score;
var b = score;
var c = score;
// 수 많은 변수들이 객체(배열) score를 참조 ...
// score.push(4);
var score2 = score.concat(4);
console.log(score, score2, a, b, c); // [1, 2, 3] [1, 2, 3, 4] [1, 2, 3] [1, 2, 3]
JavaScriptでは、不変性とパフォーマンスの間にtrade-off関係が確立されています.Reference
この問題について([生活コード]JavaScript不変性-2.ふへんかんすう), 我々は、より多くの情報をここで見つけました https://velog.io/@full_accel/JavaScript-Immutability-2.-불변의-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol