原始数据类型: number,string,boolean,undefined, null,object
基本类型(简单类型),值类型: number,string,boolean
复杂类型(引用类型):object
空类型:undefined,null
值类型的值在哪一块空间中存储? 栈中存储
引用类型的值在哪一块空间中存储?对象在堆上存储,地址在栈上存储
值类型作为函数的参数,传递的是值
引用类型作为函数的参数,传递的是地址
var num=10;//值类型,值在栈上
var obj={};//复杂类型,对象在堆,地址(引用)在栈
值类型之间传递,传递的是值
var num=10;
var num2=num;//传递的值
console.log(num2); //10
function f1(x) {
x=100;
}
var num=10;
f1(num);
console.log(num);// 10
引用类型之间传递,传递的是地址(引用)
var obj={
name:"小明"
};
function f2(obj2) {
obj2.name="小红";
}
console.log(obj.name);// 小明
f2(obj);
console.log(obj.name);// 小红
思考题:
var num1 = 10;
var num2 = num1;
num1 = 20;
console.log(num1);//20
console.log(num2);//10
var num = 50;
function f1(num) {
num = 60;
console.log(num); //60
}
f1(num);
console.log(num); //50
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(num1, num2);
console.log(num1);//55
console.log(num2);//100 不是66
console.log(num);// 报错
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