JSヒープとスタックオン

私はここについての二つの概念をお話しましょう:1.ヒープ(ヒープ)2、スタック(積み重ね)
ヒープが  短いためにヒープメモリです。
スタックは  短いため、スタックメモリです。
スタックといえば、私たちが話していることは何も難しい事はありません、事のないレジスタが存在しない、メモリの使用量および分布です。
プロセス・スタックの原則上の様々な言語は似ています。ヒープが動的に割り当てられたメモリ、メモリサイズで、それは自動的に解除されません。スタックは自動的にメモリ空間の比較的固定された量が割り当てられ、それがシステムによって自動的に解放されます。

システムによって自動的に割り当てられる未定義、ヌル、ブール値、数値および文字列、スタックに格納された値の上に直接ある、占有データ・メモリ空間の各タイプのサイズが決定され、5つの種類のJavaScriptの基本タイプそして、自動的に解除。このような利点は、メモリがスタックに比べて、より簡単にメモリ空間を管理し、時間で回復することができるということです。

データのJavaScriptの他のタイプは、基準データのタイプと呼ばれる新しいているオブジェクト(Object)を、アレイ(配列)、機能(関数)...、及びアウトコピーすることによって、そのようなデータは、ヒープに格納されています。実際には、それはヒープに格納されたと言う、それは我々が参照型の値にアクセスするときに、データの種類の引用アドレスポインタは、スタックに保存されている、ので、我々はスタックアドレスを持つオブジェクトの開始を取得する必要があり、正確ではありませんポインタは、次に、アドレスポインタによってスタックに所望のデータを検索します。

言うには、スタックの画像、線形構造、LIFO、管理が容易です。ヒープ、混沌、無秩序、コンビニエンスストアやメモリ空間を開放し
た値でとパスバイ

var arr1 = [1,2,5,8]; var arr2 = arr1 ; var str1 = arr1[2]; console.log(arr2);//1,2,5,8 console.log(str1);//5 arr2[4] = 99; str1 = 6; console.log(arr1);//1,2,5,8,99 console.log(arr1[2]);//5

私はARR2内のデータを変更するときは、STR1のデータ値を変更すると、ARR1データは、変更されている、という上記の例では、ARR1は変更されていません。なぜ?この値は、パスとパスのサイトとの間の差です。

ARR1が配列であるため、参照型であり、それはむしろスタックメモリ内のオブジェクトの値より、ARR2スタックは(異なる新しい名前「ポインタ」に対応)アドレスで通過する時間を与えます。得られたSTR1は、割り当ての基本的なタイプであり、従って、唯一STR1値は、ヒープメモリをARR1から取得し、直接スタックに格納されています。ARR1は、ARR1に影響を与えることを、時間のヒープを変更するARR2、ヒープメモリの同じ部分にすべてのポイントをARR2、STR1は、スタック内で直接変更され、データARR1ヒープメモリに影響を与えることができません。

浅い対深いコピー

それが道になると、トップの割り当ては浅いコピー、そして何がそれの深いコピーと呼ばれていますか?つまり、あなたがトラバース再びARR1したいデータの各基本的なタイプである、対応するフィールドに割り当てられたARR2を回します。アドレス参照ので、発生する問題を回避するために。

var arr1 = [1,2,5,8]; var arr2 = []; for(var i=0;i<arr1.length;i++){ arr2[i]=arr1[i]; }; console.log(arr2)//1,2,5,8 arr2[4]=99; console.log(arr2)//1,2,5,8,99 console.log(arr1)//1,2,5,8

データ構造値の観点から分類されたオブジェクトおよび非オブジェクトの処理進行上のJavaScriptのオブジェクト指向プログラミング言語自体は、オブジェクトは、スタックポインタとスタックです。

おすすめ

転載: www.cnblogs.com/allen-xing0910/p/10954231.html