简单类型和复杂类型的区别
简单数据类型,基本类型/值类型,==复杂类型又叫做引用类型==
==值类型==:简单数据类型,基本数据类型,在存储时,==变量中存储的是值本身==,因此叫做值类型。
==引用类型==:复杂数据类型,在存储时,==变量中存储的仅仅是地址(引用)==,因此叫做引用数据类型。
** 堆和栈**
堆栈空间分配区别:
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收,分配方式倒是类似于链表。
注意:
JavaScript中没有堆和栈的概念,此处我们用堆和栈来讲解,目的方便理解和方便以后的学习。
基本类型在内存中的存储
复杂类型在内存中的存储
基本类型作为函数的参数
复杂类型作为函数的参数
// 下面代码输出的结果?
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
案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
// 数据类型
// 简单数据类型,基本数据类型/值类型
// Number String Boolean Null Undefined
// 复杂数据类型,引用类型
// Object
// 数据在内存中的存储:
// 简单数据类型,存储在内存中的栈上
// 复杂数据类型,存储在内存中的堆上
// 访问简单数据类型比访问复杂数据类型速度快
// 1.简单类型在内存中如何存储?
// var n1=10;
// var n2=20;
// n2=n1;
// n1=20;
// console.log(n1,n2);// 20 10
// 2.复杂数据类型在内存中如何存储?
// Object 所有的对象都是基于Object
// function Person(name,age) {
// this.name=name;
// this.age=age;
// this.sayHi=function() {
// console.log(this.name+':hello');
// }
// }
// var p1=new Person('zs',18);
// console.log(p1.name); //zs
// p1.sayHi(); //zs:hello
// var p2=p1;
// p2.sayHi(); //zs:hello
//3.简单类型数据作为函数的参数,在内存中如何存储?
//简单类型数据存储在内存中的栈上
// function fn(a,b) {
// a=a+1;
// b=b+1;
// console.log(a); //11
// console.log(b); //21
// }
// var x=10;
// var y=20;
// fn(x,y); //调用函数时将x、y的值赋给a、b
// //x、y的值不会受函数内部执行过程的影响,a和b是两个独立的变量
// console.log(x); //10
// console.log(y); //20
//4.复杂 类型数据作为函数的参数,在内存中如何存储?
// function Person(name,age) {
// this.name=name;
// this.age=age;
// this.sayHi=function() {
// console.log(this.name+':hello');
// }
// }
// var P=new Person('zs',18);
// function fn(person) {
// person.name='ls';
// person=new Person('ww',20);
// console.log(person.name); //ww
// }
// fn(P);
// console.log(P.name); //ls
//5. 数组也是复杂数据类型
// 对数组排序,从小到大--冒泡排序
function sort(array) {
//外层循环控制趟数
for(var i=0;i<array.length-1;i++) {
//假设排好序了
var isSort=true;
//内层循环控制比较的次数
for(var j=0;j<array.length-1-i;j++){
if (array[j]>array[j+1]) {
isSort=false;
//交换位置
var t=array[j];
array[j]=array[j+1];
array[j+1]=t;
}
}
//判断是否排好了
if (isSort) {
break;
}
}
// return array;
}
// var array=[3,44,2,66,88];
// function fn(arr) {
// arr[0]=-1;
// }
// fn(array);
// console.log(array);
var array=[3,44,2,66,88];
var r=sort(array);
console.log(r);
console.log(array);
</script>
</head>
<body>
</body>
</html>
网友评论