发表于: 2017-01-02 02:52:47
0 1640
今天完成的计划:js 中复制变量值的问题。
有两种传递的方式:1.值传递 2.引用传递
基本类型:number undefined,Boolean,null, string 都是值传递
引用类型 :function array object 是引用传递
1.值传递 会有一个新的副本新建,
var num1 =5;
var num2 =num1;
num2 = 6
console.log(num1)// 5 这里是不会有影响的 。
引用传递 是指针都指向同一个对象 数组也是相同的原理
//因为两个变量指针都是指向同一个对象 所以obj可以直接获取这个属性
var obj1 = new Object();
var obj2 = obj1;
obj2.name ="shuai";
console.log(obj1.name) //为shuai
下面这种是不会的
//因为两个变量指针都是指向同一个对象 所以obj可以直接获取这个属性
var obj1 = new Object();
var ob2 = obj1;
obj1.name ="shuai";
obj1 = 123; //这样做不会影响ob2 因为obj1已经不再指向 原来的对象了 但是在同时指向同一个对象的时候 修改其中的属性 ob2还是会受到影响
console.log(ob2)
3.传递参数
// count不通过参数传递count会变化
var count1= 20;
function ww(){
count1+=10
}
ww()
console.log(count1) 30
//通过传递参数 被传递的值会被复制给一个局部变量就是anguments对象的一个元素了
//
//res是count2的副本
//在函数内部改引用时只在这个局部中有用不能修改引用
var count2 = 20;
function ee(res){
res+=10
console.log(res)
}
ee(count2)
console.log(count2) 20
然后我们来了解一下传递参数到底是 值传递还引用传递
function setname(obj){
obj.name ="chenshi"
}
var personal = new object();
console.log(setname(personal.name))//chenshi 这里虽然改变了这个对象属性 但是不是引用传递
且看
function setname(obj){
obj.name ="chenshi"
obj = new object()
obj.name ="chenshuang"
}
var personal = new object();
console.log(setname(personal.name)) //这里还是chenshi 因为这里重新附一个对象是 是在这函数里的局部新对象 已经不是原来的对象了所以对原来的属性没有改变
//with语句 可以省去很多步骤可以直接引用对象里的属性方法
var bb ={name:"尘世",ago:"5岁"}
with(bb){
console.log(name)
}
function Lakers() {
this.name = "kobe bryant";
this.age = "28";
this.gender = "boy";
}
var people=new Lakers();
with(people)
{
var str = "姓名: " + name + "<br>";
str += "年龄:" + age + "<br>";
str += "性别:" + gender;
document.write(str);
}
评论