发表于: 2017-01-02 02:52:47

0 1639


今天完成的计划: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);  

}  











返回列表 返回列表
评论

    分享到