JavaScript pila y simples tipos, tipos complejos

JavaScript pila y simples tipos, tipos complejos

tipo

tipos de datos simples también se conocen tipo básico o tipo de valor, tipo complejo también conocida como un tipo de referencia.

Los tipos simples: Cuando se almacena el valor almacenado en la variable misma, de ahí el nombre de tipo de valor. Los tipos de valor tienen cadena, número, booleano, sin definir, null

Tipo complejo: tipos de datos complejos almacenados en la dirección de memoria de una variable única (de referencia), y por lo tanto se llama tipos de datos de referencia para crear nuevos objetos por palabra clave (los objetos del sistema, objetos personalizados), hay un tipo complejo de objetos, Array, fecha, etc.

Montón y pila

la asignación de espacio de pila:

Pila: El valor asignado por el sistema operativo libera automáticamente, el valor de la variable local y similares. Operar de manera similar a una estructura de datos de la pila. tipos de datos simples almacenados en la memoria de pila.

Heap: almacenar tipo complejo (objeto), la liberación es generalmente asignado por el programador, si el programador no libera, recuperada por el mecanismo de recogida de basura. Los tipos complejos de datos almacenados en la memoria de pila.

Nota: JavaScript pila en sí no es el concepto de la denominada pila sólo para ser mejor entendida a través de otros mecanismos de almacenamiento 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
// 在使用复杂类型数据时,两个变量不能直接用 === 号来做比较。 由于比较麻烦一些,这个后续研究后更新文章

Supongo que te gusta

Origin www.cnblogs.com/liea/p/12514237.html
Recomendado
Clasificación