简单类型和复杂类型的区别
基本类型又叫做值类型,复杂类型又叫做引用类型
值类型:简单数据类型,基本数据类型,在存储时,变量中存储的是值本身,因此叫做值类型。
引用类型:复杂数据类型,在存储时,变量中存储的仅仅是地址(引用),因此叫做引用数据类型。
-
堆和栈
堆栈空间分配区别: 1、栈(操作系统): 由操作系统自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 2、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收,分配方式类似于链表。
存储地址 | 存储的是 | 复制的是 | |
---|---|---|---|
简单(基本)类型 | 栈 | 值本身 | 值的副本 |
复杂(引用)类型 | 堆 | 地址 | 引用指针,指向同一个对象 |
基本类型在内存中的存储
复杂类型在内存中的存储
基本类型作为函数的参数
复杂类型作为函数的参数
// 下面代码输出的结果
function Person(name,age,salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
function f1(person) {
person.name = "ls";
person = new Person("aa",18,10);
}
var p = new Person("zs",18,1000);
console.log(p.name); // "zs"
f1(p);
console.log(p.name); // "ls"
思考:
//1.
var num1 = 10;
var num2 = num1;
num1 = 20;
console.log(num1); // 20
console.log(num2); // 10
//2.
var num = 50;
function f1(num) {
num = 60;
console.log(num); // 60
}
f1(num);
console.log(num); // 50
//3.
var num1 = 55;
var num2 = 66;
function f1(num, num1) {
num = 100;
num1 = 100;
num2 = 100;
console.log(num); // 100
console.log(num1); // 100
console.log(num2); // 100
}
// f1函数里面的num、num1是形参,所以 num 在函数外部访问会显示未定义,num2 相当于又全局定义了一下,所以在函数外部可以访问到
// function f1(a, b) {
// a = 100;
// b = 100;
// num2 = 100;
// console.log(a, b, num2); // 10 100 100
// }
f1(num1, num2);
console.log(num1); // 55
console.log(num2); // 100
console.log(num); // num is not defined