JavaScriptのスタックと単純型、複合型

JavaScriptのスタックと単純型、複合型

タイプ

単純なデータ型は、基本的なタイプまたは値型も参照型として知られている複合型を知られています。

単純型:格納された値は、変数自体に格納され、その名の値型。値型は、文字列、数値、ブール値、未定義、ヌルを持っています

複合型:キーワードで新しいオブジェクト(システム・オブジェクト、カスタムオブジェクト)を作成する参照データ型と呼ばれ、従って変数のみ(参照)のメモリアドレスに格納され、複雑なデータ型、複合型オブジェクト、配列、日付など、あります

ヒープとスタック

スタック領域の割り当て:

スタック:自動的にリリースされたオペレーティングシステムによって割り当てられた値、ローカル変数の値などが挙げられます。スタックデータ構造と同様に動作します。スタックメモリに保存されている単純なデータ型。

ヒープ:プログラマがガベージコレクションメカニズムによって回収され、解放しない場合は保存する複合型(オブジェクト)が、リリースは一般的に、プログラマが割り当てられます。ヒープメモリに格納されたデータの複雑なタイプ。

注:JavaScriptはちょうど良く、他のストレージ・メカニズムJavaScript言語によって理解されるように、いわゆるスタックの概念ではない自分自身を積み重ねます。

var a = 10
function fn(x){
    x++
    console.log('打印x', x)
}
fn(a)
console.log('打印a', a)
// 打印 x= 11
// 打印 a= 10
// 由于a是值类型,在内存中使用的是栈空间有自己的存储地址。所以在函数中x + 1 只改变了函数内的变量x自己对应存储空间的值,在函数外部a对应存储空间的值并未更改,打印a还是原来的值10
var obj = { num: 20}
function fn(x){
    x.num++
    console.log('打印x=', x)
}
fn(obj)
console.log('打印a=', obj)
// 打印x= { num: 21 }
// 打印a= { num: 21 }
// 由于obj是复杂类型在内存中使用的是堆空间没有单独存储地址,在函数fn中的x和外面的obj共享一份存储空间。因此函数中改变了x.num对应存储空间的值,实际也就是改变了obj对应的存储空间的值,因此外面的obj对象的值也会随之改变。
var a = []
var b = []
console.log('打印', a === b)
// 打印 false
var a = {}
var b = {}
console.log('打印', a === b)
// 打印 false
// 在使用复杂类型数据时,两个变量不能直接用 === 号来做比较。 由于比较麻烦一些,这个后续研究后更新文章

おすすめ

転載: www.cnblogs.com/liea/p/12514237.html